答案:Go通过net包实现UDP通信,使用net.ListenUDP接收数据,net.DialUDP发送数据。示例包含服务器监听127.0.0.1:8080接收并响应消息,客户端发送“Hello UDP Server!”并接收回复。关键点包括UDP无连接特性、地址解析、读写方式及应用层可靠性处理,适用于日志、心跳等场景。

在Golang中实现UDP数据的发送与接收非常直接,得益于标准库net包对UDP协议的良好支持。你可以使用net.ListenUDP来监听UDP端口接收数据,用net.DialUDP或net.Conn接口发送数据。下面分步骤说明如何实现。
创建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服务器已启动,等待数据...") buffer := make([]byte, 1024) for { n, clientAddr, err := conn.ReadFromUDP(buffer) if err != nil { fmt.Println("读取错误:", err) continue } fmt.Printf("收到来自 %s 的消息: %sn", clientAddr, string(buffer[:n])) // 可选:回复客户端 response := "收到: " + string(buffer[:n]) conn.WriteToUDP([]byte(response), clientAddr) }}
创建UDP客户端发送数据
客户端通过连接目标UDP地址,发送数据报文。
立即学习“go语言免费学习笔记(深入)”;
示例代码:
package mainimport ( "fmt" "net")func main() { // 解析服务端地址 addr, err := net.ResolveUDPAddr("udp", "127.0.0.1:8080") if err != nil { panic(err) } // 建立UDP连接 conn, err := net.DialUDP("udp", nil, addr) 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) // 接收服务器响应 buffer := make([]byte, 1024) n, err := conn.Read(buffer) if err != nil { fmt.Println("接收响应失败:", err) return } fmt.Println("收到响应:", string(buffer[:n]))}
关键点说明
无连接特性:UDP是无连接协议,每次发送的数据报独立存在,不保证顺序和可靠性。
PHP5 和 MySQL 圣经
本书是全面讲述PHP与MySQL的经典之作,书中不但全面介绍了两种技术的核心特性,还讲解了如何高效地结合这两种技术构建健壮的数据驱动的应用程序。本书涵盖了两种技术新版本中出现的最新特性,书中大量实际的示例和深入的分析均来自于作者在这方面多年的专业经验,可用于解决开发者在实际中所面临的各种挑战。
466 查看详情
地址解析:net.ResolveUDPAddr用于将字符串地址转为*net.UDPAddr类型,是建立通信的前提。
读写方式:
conn.ReadFromUDP 可获取发送方地址,适合服务器处理多个客户端conn.WriteToUDP 向指定地址发送数据若使用DialUDP建立连接,则可直接用Write和Read
简单双向通信模型
上述例子实现了请求-响应模式。虽然UDP本身不维护连接,但通过记录客户端地址,服务器可以回发消息,模拟双向通信。
注意:由于UDP不保证送达,如需可靠性,需在应用层添加重传、确认等机制。
基本上就这些。Go的标准库让UDP编程变得简洁高效,适合日志传输、心跳包、DNS查询等场景。
以上就是如何在Golang中实现UDP数据发送与接收的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1022349.html
微信扫一扫
支付宝扫一扫