

新闻资讯
技术学院Go net包支持TCP/UDP等协议:TCP用于可靠连接(如HTTP),UDP用于轻量实时场景(如DNS);TCP服务端用Listen+Accept并发处理,客户端用Dial收发;UDP通过ListenUDP+ReadFromUDP/WriteToUDP实现无连接通信。
Golang 的 net 包是标准库中实现网络通信的核心工具,支持 TCP、UDP、Unix 域套接字等多种协议。TCP 适用于需要可靠、有序、面向连接的场景(如 HTTP、RPC);UDP 更轻量,适合实时性要求高、能容忍丢包的场景(如 DNS 查询、音视频传输)。下面以实用方式讲解如何用 net 包编写 TCP 和 UDP 的客户端与服务器。
使用 net.Listen("tcp", ":8080") 启动服务,接受连接后启动 goroutine 处理每个客户端,避免阻塞后续连接。
"host:port",":8080" 表示监听本机所有 IPv4/IPv6 地址的 8080 端口
listener.Accept() 返回一个 net.Conn,代表一条 TCP 连接示例关键代码:
ln, _ := net.Listen("tcp", ":8080")
defer ln.Close()
for {
conn, err := ln.Accept()
if err != nil {
log.Println("Accept error:", err)
continue
}
go handleConn(conn) // 并发处理
}
用 net.Dial("tcp", "localhost:8080") 建立连接,返回的 net.Conn 可直接读写。
conn.Write([]byte("hello")),读取用 conn.Read(buf)(阻塞直到有数据或出错)conn.Close() 释放资源;若服务端关闭连接,Read 将返回 io.EOF
UDP 不维护连接状态,用 net.ListenUDP("udp", addr) 绑定地址,通过 ReadFromUDP 和 WriteToUDP 收发数据。
*net.UDPAddr 类型,可用 net.ResolveUDPAddr("udp", ":9000") 解析客户端也用 net.ListenUDP 创建本地 soc
ket(可指定端口,也可让系统自动分配),再用 WriteToUDP 发送,ReadFromUDP 接收响应。
net.DialUDP(但 DialUDP 仍需本地绑定,只是封装了)SetReadDeadline)