Go中实现TCP客户端需用net.Dial建立连接,通过conn读写数据;注意流式协议无消息边界、须处理超时与错误、显式关闭连接。

在 Go 语言中实现 TCP 客户端,核心是使用 net 包中的 net.Dial 建立连接,然后通过返回的 conn(实现了 io.ReadWriteCloser)发送和接收数据。整个过程简洁、阻塞式、易于控制。
建立 TCP 连接
调用 net.Dial("tcp", "host:port") 即可发起连接。Go 会自动解析域名、选择 IPv4/IPv6,并完成三次握手。如果连接失败(如服务器未启动、网络不通、端口被拒),会立即返回错误。
- 地址格式必须是
"host:port",例如"127.0.0.1:8080"或"example.com:9999" - 不支持只传主机名而不带端口;端口必须是字符串形式(不能是 int)
- 建议设置超时,避免无限等待:用
net.DialTimeout("tcp", addr, 5*time.Second)
发送请求数据
连接成功后,conn 可直接写入字节。注意 TCP 是流式协议,没有消息边界——你写一次 Write,对方可能分多次 Read 到,或合并多次写入一起读到。
- 用
conn.Write([]byte("HELLO\n"))发送原始字节 - 若需发送结构化数据(如 JSON),先序列化再写入:
json.NewEncoder(conn).Encode(req) - 常见做法是约定结尾符(如
\n)或长度前缀,方便服务端拆包
读取服务器响应
使用 conn.Read() 读取响应,它会阻塞直到有数据到达或连接关闭。由于不知道响应多长,通常需循环读取或配合缓冲区处理。
采用HttpClient向服务器端action请求数据,当然调用服务器端方法获取数据并不止这一种。WebService也可以为我们提供所需数据,那么什么是webService呢?,它是一种基于SAOP协议的远程调用标准,通过webservice可以将不同操作系统平台,不同语言,不同技术整合到一起。 实现Android与服务器端数据交互,我们在PC机器java客户端中,需要一些库,比如XFire,Axis2,CXF等等来支持访问WebService,但是这些库并不适合我们资源有限的android手机客户端,
立即学习“go语言免费学习笔记(深入)”;
- 简单场景可用
io.ReadAll(conn)读完所有数据(直到 EOF 或错误) - 更稳妥的做法是预分配缓冲区,例如:
buf := make([]byte, 1024); n, err := conn.Read(buf) - 若服务端按行响应,可用
bufio.NewReader(conn).ReadString('\n')
关闭连接与错误处理
TCP 连接用完必须显式关闭,否则会泄漏文件描述符。同时,所有 I/O 操作都应检查错误。
- 务必在 defer 或函数末尾调用
conn.Close() -
Write和Read都可能返回io.EOF(对端关闭连接)或其他网络错误 - 不要忽略
err:哪怕只是打印日志,也比静默失败好
不复杂但容易忽略。写一个健壮的 TCP 客户端,关键不是语法,而是理解流式通信的边界问题和资源生命周期管理。









