【发布时间】:2010-12-18 05:45:23
【问题描述】:
对于以下我假设一个网卡。
我的程序中有一个组件,旨在让子网中的其他人知道它的存在。为此,我实现了一个解决方案,每当程序启动时(以及之后定期),它都会向INADDR_BROADCAST 发送一个广播——任何在所需端口上监听的人都会记住它来自何处以供以后使用。
问题在于我不想记住自己的广播。我认为理论上这很容易做到 - 只需找出本地 ip 并与您在recvfrom 中获得的内容进行比较。
但是,我发现很难获得本地 IP:getaddrinfo 带有 NULL 返回 127.0.0.1,getaddrinfo 带有主机名返回公共 IP。谁能指出我找到实际子网 ip 的方向?我想我一定在这里遗漏了一些非常明显的东西,但是……我仍然想念它:)
注意:我已经阅读了其他关于广播的 SO 问题,尤其是这个:UDP-Broadcast on all interfaces,但我还没有解决多接口问题。
【问题讨论】:
-
您为什么不利用现有的解决方案,例如 mDNS(Multicast-DNS)?
-
mDNS 对于我的需求来说太复杂了。
标签: c networking udp broadcast berkeley-sockets