我正在开发一种通信协议(protocol),该协议(protocol)应该通过在本地网络上广播/多播对等方的地址来支持 self 配置。直观的方法是广播地址,但事实证明,很难可靠地找出当前计算机的本地 IP 地址(根据配置,您可能会得到“127.0.0.1”或其他无用的地址) .
另一种方法是不在广播消息中包含主机地址,而是让接收者在其套接字上调用 recvfrom
,这不仅返回接收到的数据,还返回发送者的地址。据我所知,该调用在 Unix 和 Windows(我的要求之一)以及可能更多平台上都可用。我现在的问题是,在某些情况下这可能会失败并且 recvfrom
返回无法访问或无用的地址?
最佳答案
如果您将此技术限制为仅广播 UDP,那么应该没问题。唯一会造成困惑的因素是双 NAT 或发夹 NAT 之类的东西。无论如何,这只是本地广播无法完成的。
关于networking - socket.recvfrom 总是返回有效地址吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11658724/