package main
import (
"fmt"
"github.com/gogf/gf/net/gnet"
"log"
)
func main() {
udpServer := gnet.NewUDPServer("127.0.0.1:8999", func(data []byte, addr gnet.AddrUDP, conn gnet.Conn) {
// 处理 UDP 数据
fmt.Printf("Received UDP message from %s: %s\n", addr.String(), string(data))
// 回复消息
conn.SendTo([]byte("Hello, UDP client!"), addr)
})
// 启动 UDP 服务器
if err := udpServer.Run(); err != nil {
log.Fatalf("UDP Server error: %v", err)
}
}
在这个示例中,我们使用 gnet.NewUDPServer 方法创建了一个 UDP 服务器。该服务器监听在地址 127.0.0.1:8999 上,接收到 UDP 数据包后,会执行回调函数。回调函数接收了三个参数:data 表示接收到的 UDP 数据,addr 是发送方的地址信息,conn 是连接对象。
在回调函数中,我们简单地打印了接收到的消息,并通过 conn.SendTo 方法将消息回复给发送方。
请注意,UDP 是面向无连接的协议,因此在处理数据包时,你需要确保消息的完整性和顺序。在实际应用中,你可能需要根据具体的场景设计更复杂的协议和数据包处理逻辑。
在 UDP 通信中,因为没有连接的概念,所以没有像 TCP 那样的长连接和连接池的概念。每次接收到 UDP 数据包都是一个独立的事件。
转载请注明出处:http://www.zyzy.cn/article/detail/7879/GoFrame