猿问

使用UDPConn的请求/响应对话

我正在尝试实现以下UDP协议,但在准确确定应如何处理时遇到了一些麻烦。


该协议规定,我应该将特定的UDP数据包发送到特定的服务器,然后该服务器将流(其他相关的UDP数据包)作为UDP数据包返回给我。我设法使用以下代码发送了UDP数据包:


connection, error := net.DialUDP("udp", nil, endpoint)

...

if written, error := connection.Write(query.ToBytes()); error != nil {

    ...

} else {

    log.Printf("Successfully wrote %d bytes to %s", written, connection.RemoteAddr())

}

当我使用Wireshark并查看线路上发生了什么时,它似乎已经很好地发送了数据包(这里唯一的问题是我从未收到服务器的回复,但这与该问题无关)。


在这种情况下,处理服务器回复的最佳方式是什么?我可以使用先前建立的connection来读取服务器响应(这对我来说似乎不太可能,因为它的UDP如此无连接),还是应该使用我net.ListenUDP(...)在正确的本地地址和端口上建立服务器来读取服务器发回给我的任何内容?


HUX布斯
浏览 221回答 2
2回答

尚方宝剑之说

该协议的目的显然是,您只使用相同的UDP套接字来接收用于发送请求的答复。如果您有客户端防火墙,则必须在发送之前显式打开UDP端口并将UDP套接字绑定到该端口。否则,完全不绑定,让系统选择本地端口。短语“与初始数据包建立的端口相同”具有误导性。他们是您的话,还是协议规范的?第一次发送时真正发生的是,如果尚未绑定套接字,它将自动绑定到系统选择的端口,就像将其绑定到端口零一样。
随时随地看视频慕课网APP

相关分类

Go
我要回答