对于以下我假设一张网卡.
我有我的程序的一个组件,旨在让子网中的其他人知道它的存在.为此,我已经实现了一个解决方案,无论何时程序启动(以及之后定期)它都会向广播发送广播INADDR_BROADCAST
- 无论谁在所需端口上进行侦听,都会记住它来自何处以供以后使用.
这个问题是我不想记住我自己的广播.我认为理论上这很容易做 - 只需找出本地ip并与你得到的内容进行比较recvfrom
.
但是,我发现很难获得本地IP:getaddrinfo
返回NULL 127.0.0.1
,getaddrinfo
主机名返回公共IP.任何人都可以指向我找到实际的子网IP的方向?我想我必须错过一些非常明显的东西但是......我还是错过了:)
注意:我已经阅读了有关广播的其他SO问题,特别是这一个:所有接口上的UDP-Broadcast,但我尚未解决多接口问题.
在启动时,您可以使用随机(但跟踪)值广播不同的消息,然后等待该消息,发现您自己的地址,从那时起,您可以发送正常消息,忽略您的来源消息.