如何使用Golang创建UDP Server_GolangUDP Server监听方法

Go UDP服务端核心是net.ListenUDP绑定地址后循环ReadFromUDP读包;需预设缓冲区、处理addr并WriteToUDP回复;退出前调用Close释放资源。

用 Go 写 UDP 服务端很简单,核心就是调用 net.ListenUDP 绑定地址,再用循环读取数据包。

监听 UDP 端口

UDP 是无连接协议,不需要 accept,直接监听即可。常用方式是:

  • 指定本地 IP 和端口,例如 :8080 表示监听所有网卡的 8080 端口
  • 使用 net.ListenUDP 返回一个 *net.UDPConn 对象
  • 注意:端口若被占用会报错,可先检查或用 net.ListenUDP("udp", &net.UDPAddr{Port: 0}) 让系统自动分配空闲端口

接收并处理数据包

UDP 每次收发都是独立的数据报(datagram),需为每次读取准备足够大的缓冲区(通常 1024 或 65535 字节):

  • conn.ReadFromUDP(buf) 阻塞读取,返回实际读到的字节数和发送方地址
  • 收到的数据不保证顺序、不保证到达,应用层需自行处理丢包或重复
  • 建议对 buf[:n] 做安全截取,避免越界访问

向客户端回复消息

UDP 支持单播回复,只需用上一步拿到的 *net.UDPAddr

  • 调用 conn.WriteToUDP([]byte("hello"), addr) 即可发回
  • 不需要预先“建立连接”,也不需要维护连接状态
  • 如果只是丢弃请求、不回复,跳过这步即可

关闭与资源清理

服务运行中一般不主动关闭,但退出前应释放连接:

  • 调用 conn.Close() 释放 socket 资源
  • 在信号捕获(如 os.Interrupt)中优雅关闭是常见做法
  • 注意:Go 的 UDPConn 关闭后不能再读写,否则 panic

基本上就这些。UDP Server 不复杂但容易忽略错误处理和缓冲区边界,写的时候多留心。