Go语言通过net包实现UDP通信,服务端使用ListenUDP监听并接收数据,客户端通过DialUDP发送消息并接收响应,利用goroutine可支持并发处理,适用于高性能、低延迟场景。

Go语言通过net包提供了对UDP协议的良好支持,适合实现轻量级、高性能的数据传输。下面是一个简单的Golang中使用*net.UDPConn进行UDP数据收发的示例,包括服务端接收和客户端发送操作。
UDP服务端:监听并接收数据
服务端绑定到指定地址和端口,持续监听来自客户端的UDP消息。
package mainimport ( "fmt" "net" )
func main() { // 绑定本地地址和端口 addr, err := net.ResolveUDPAddr("udp", "127.0.0.1:8080") if err != nil { panic(err) }
conn, err := net.ListenUDP("udp", addr) if err != nil { panic(err) } defer conn.Close() fmt.Println("UDP服务器已启动,监听 8080 端口...") buffer := make([]byte, 1024) for { n, clientAddr, err := conn.ReadFromUDP(buffer) if err != nil { fmt.Println("读取数据失败:", err) continue } fmt.Printf("收到来自 %s 的消息: %s\n", clientAddr, string(buffer[:n])) // 回复确认消息 response := "收到: " + string(buffer[:n]) conn.WriteToUDP([]byte(response), clientAddr) }}
UDP客户端:发送数据并接收响应
客户端向服务端发送一条消息,并等待返回的响应。
package mainimport ( "fmt" "net" "time" )
func main() { serverAddr, err := net.ResolveUDPAddr("udp", "127.0.0.1:8080") if err != nil { panic(err) }
conn, err := net.DialUDP("udp", nil, serverAddr) if err != nil { panic(err) } defer conn.Close() message := "Hello UDP Server" _, err = conn.Write([]byte(message)) if err != nil { fmt.Println("发送失败:", err) return } fmt.Println("已发送消息:", message) // 设置读取超时 conn.SetReadDeadline(time.Now().Add(5 * time.Second)) buffer := make([]byte, 1024) n, _, err := conn.ReadFromUDP(buffer) if err != nil { fmt.Println("接收响应失败:", err) return } fmt.Println("收到回复:", string(buffer[:n]))}
关键点说明
地址解析:使用net.ResolveUDPAddr将字符串格式的地址转换为*net.UDPAddr。
立即学习“go语言免费学习笔记(深入)”;
易通(企业网站管理系统)是一款小巧,高效,人性化的企业建站程序.易通企业网站程序是国内首款免费提供模板的企业网站系统.§ 简约的界面及小巧的体积:后台菜单完全可以修改成自己最需要最高效的形式;大部分操作都集中在下拉列表框中,以节省更多版面来显示更有价值的数据;数据的显示以Javascript数组类型来输出,减少数据的传输量,加快传输速度。 § 灵活的模板标签及模
连接方式差异:
-
ListenUDP用于服务端被动监听 -
DialUDP创建一个已连接的UDP套接字,适合客户端连续通信 - 也可以用
conn.WriteToUDP()发送到任意目标地址
无连接特性:UDP是无状态协议,每次通信都独立,适用于低延迟场景如音视频、心跳包等。
运行示例
先运行服务端,再运行客户端,观察输出:
- 服务端应打印“收到来自 ... 的消息”
- 客户端应收到“收到: Hello UDP Server”
基本上就这些。UDP编程在Go中非常直接,结合goroutine还能轻松实现并发处理多个客户端请求,不复杂但容易忽略错误处理和缓冲区大小控制。实际使用中建议加上日志和超时管理。









