以下我假设有一张网卡。
我的程序中有一个组件,旨在让子网中的其他人知道它的存在。为此,我实现了一个解决方案,每当程序启动时(并在之后定期启动),它都会向 INADDR_BROADCAST
发送广播 - 监听所需端口的任何人都会记住它来自何处以供以后使用。
问题是我不想记住自己的广播。我认为理论上这很容易做到 - 只需找出本地 ip 并与您在 recvfrom
中获得的内容进行比较。
但是,我发现很难获取本地 IP:getaddrinfo
为 NULL 返回 127.0.0.1
,getaddrinfo
为主机名返回公共(public) ip。谁能指出我找到实际子网 ip 的方向?我想我一定在这里遗漏了一些非常明显的东西,但是......我仍然想念它:)
注意:我已经阅读了关于广播的其他 SO 问题,尤其是这个问题:UDP-Broadcast on all interfaces但我还没有解决多接口(interface)问题。
最佳答案
在启动时,您可以广播一条具有随机(但可跟踪)值的不同消息,然后等待该消息,以发现您自己的地址,从那时起,您可以发送普通消息,忽略您的来源消息。
关于c - 如何忽略自己广播的udp包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1762101/