使用Golang创建TCP客户端核心是net.Dial函数,支持超时控制、读写数据及错误处理。需检查error、关闭连接,并注意TCP流式特性与协议解析。

使用 Golang 创建 TCP 客户端非常简单,核心是 net.Dial 函数。它会自动完成 DNS 解析、建立连接、返回可读写的 net.Conn 接口,后续只需按需读写即可。
基础 TCP 连接:一行 Dial 就够
最简方式就是调用 net.Dial("tcp", "host:port"):
- 第一个参数固定为
"tcp"(IPv4)或"tcp4"/"tcp6"(显式指定版本) - 第二个参数是地址字符串,格式为
"127.0.0.1:8080"或"example.com:80" - 成功返回
net.Conn,失败返回 error,务必检查
带超时的连接:避免卡死
直接 Dial 没有连接超时控制,生产环境推荐用 net.DialTimeout 或更灵活的 net.Dialer:
-
net.DialTimeout("tcp", "localhost:9000", 5 * time.Second)—— 简单粗暴设超时 - 用
net.Dialer可精细控制:设置Timeout(连接阶段)、KeepAlive(保活)、LocalAddr(绑定本机地址)等 - 示例:
dialer := &net.Dialer{Timeout: 3 * time.Second, KeepAlive: 30 * time.Second},再调dialer.Dial("tcp", addr)
发送与接收数据:Conn 就是 Reader + Writer
net.Conn 同时实现了 io.Reader 和 io.Writer,所以:
立即学习“go语言免费学习笔记(深入)”;
- 发数据:直接
conn.Write([]byte("Hello"))或用fmt.Fprintf(conn, "GET / HTTP/1.1\r\nHost: x\r\n\r\n") - 收数据:用
conn.Read(buf)(阻塞直到有数据或出错),或封装成bufio.NewReader(conn)方便按行/按大小读取 - 注意:TCP 是流式协议,没有消息边界,服务端发一次,客户端可能分多次收到;需自行约定协议(如长度前缀、换行分隔)
关闭连接与错误处理:别漏掉 defer 和判空
连接用完必须关闭,且所有 I/O 操作都要检查 error:
- 用
defer conn.Close()确保退出前释放资源 - 每次
Write/Read后检查 error,特别注意io.EOF表示对方已关闭连接 - 网络错误常见类型:
net.OpError(可判断是否超时或拒绝连接),os.SyscallError等,按需分类处理
基本上就这些。Golang 的 net 包设计清晰,TCP 客户端几行代码就能跑起来,关键在超时控制、协议解析和错误兜底——不复杂但容易忽略。










