You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Go TCP服务器中打印netcat发送的TCP消息?

解决Go服务器读取nc发送消息并打印的问题

这问题很容易搞定!要实现你要的功能,只需要把读取到的字节数据转换成字符串,再处理掉echo默认添加的换行符即可。具体步骤如下:

1. 导入必要的包

首先需要在导入部分添加strings包,用来处理字符串的空白字符:

import (
    "fmt"
    "net"
    "os"
    "strings" // 新增这个包
)

2. 处理并打印消息

在// PRINT MESSAGE HERE的位置,添加以下代码:

// PRINT MESSAGE HERE
message := strings.TrimSpace(string(buf[:reqLen]))
fmt.Println(message)

代码解释:

  • buf[:reqLen]:conn.Read()返回的reqLen是实际读取到的字节数,我们只取数组中有效的这部分数据,避免读取到buf中未初始化的空字节。
  • string(...):把字节数组转换成字符串类型。
  • strings.TrimSpace(...):去掉字符串首尾的空白字符(包括echo命令默认添加的换行符\n),这样就能得到干净的MESSAGE内容。

修改后的完整代码

package main
import (
    "fmt"
    "net"
    "os"
    "strings"
)
func main() {
    ln, err := net.Listen("tcp", ":8080")
    check(err)
    for {
        conn, err := ln.Accept()
        check(err)
        go handleConnection(conn)
    }
}
func handleConnection(conn net.Conn) {
    buf := make([]byte, 1024)
    reqLen, err := conn.Read(buf)
    check(err) // 先检查错误再处理数据,避免err非nil时reqLen无效
    // PRINT MESSAGE HERE
    message := strings.TrimSpace(string(buf[:reqLen]))
    fmt.Println(message)
    conn.Write([]byte("Message received."))
    fmt.Println(conn.RemoteAddr().String())
    conn.Close()
}
func check(err error) {
    if err != nil {
        fmt.Println("Error:" + err.Error())
        os.Exit(1)
    }
}

额外提示

我注意到你原来的代码里先打印reqLen再检查err,这其实有风险——如果conn.Read()返回错误(比如连接中断),reqLen的值可能无效,所以建议先调用check(err)再处理读取到的数据,就像上面修改后的代码那样。

现在你运行服务器,再执行echo "Hello Go" | nc localhost 8080,就能在服务器的标准输出看到Hello Go啦!

内容的提问来源于stack exchange,提问作者maverigz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:57:49