c - 如何忽略自己广播的udp包

标签 c networking udp broadcast berkeley-sockets

以下我假设有一张网卡。

我的程序中有一个组件,旨在让子网中的其他人知道它的存在。为此,我实现了一个解决方案,每当程序启动时(并在之后定期启动),它都会向 INADDR_BROADCAST 发送广播 - 监听所需端口的任何人都会记住它来自何处以供以后使用。

问题是我不想记住自己的广播。我认为理论上这很容易做到 - 只需找出本地 ip 并与您在 recvfrom 中获得的内容进行比较。

但是,我发现很难获取本地 IP:getaddrinfo 为 NULL 返回 127.0.0.1getaddrinfo 为主机名返回公共(public) ip。谁能指出我找到实际子网 ip 的方向?我想我一定在这里遗漏了一些非常明显的东西,但是......我仍然想念它:)

注意:我已经阅读了关于广播的其他 SO 问题,尤其是这个问题:UDP-Broadcast on all interfaces但我还没有解决多接口(interface)问题。

最佳答案

在启动时,您可以广播一条具有随机(但可跟踪)值的不同消息,然后等待该消息,以发现您自己的地址,从那时起,您可以发送普通消息,忽略您的来源消息。

关于c - 如何忽略自己广播的udp包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1762101/

相关文章:

qt - UDP 拆分/合并。哪一层处理它? (QT网络)

c - sethostname 标识符未找到错误

c# - 如何检查谁在 C# 中使用某个端口?

c - 在哪里可以找到在 GCC 汇编输出中调用的过程的汇编代码?

c - 为什么编译器创建一个变量 "twice"?

C 哈希表大小问题

iphone - iPhone 应用程序中 NSHost 的替代品

linux - 跳转服务器内部服务器之间的连接

java - 如何以编程方式启用 UDP/IP 广播?

c - 检测当前是否正在读取文件