我正在寻找一个好的解决方案,用于使用Go语言的UDP套接字进行客户机/服务器通信.
我在Internet上找到的示例向我展示了如何将数据发送到服务器,但它们并没有教我如何将数据发送回客户端.
为了演示,我的程序执行以下操作:
我的客户端程序在4444端口上创建套接字,如下所示:
con, err := net.Dial("udp", "127.0.0.1:4444")
我向服务器发送了一个字符串和本地地址,这样它就可以打印字符串并发送OK消息.我使用gob来实现以下目的:
enc := gob.NewEncoder(con)
enc.Encode(Data{"test", con.LocalAddr().String()})
我的数据 struct 如下所示:
type Data struct{
Msg string
Addr string
}
我的服务器监听4444端口并正确解码Gob,但我如何才能将OK消息发送回?我正在使用客户端地址(在server.go文件上)执行此操作:
con, err := net.Dial("udp", data.Addr)
然后,我得到一个错误代码:
write udp 127.0.0.1:35290: connection refused
当客户端try 连接到服务器的端口4444时,客户端会创建一个具有随机数(在本例中为35290)的端口,以便它们可以通信.我知道我不应该将客户机的地址传递给服务器,但是cont.RemoteAddress()不起作用.如果能找到客户端地址的解决方案,我们将不胜感激.
我知道有ReadFromUDP,所以我可以看Package.我应该读取它,发现客户端的地址,然后将数据发送到Gob,以便它可以解码吗?