c - bind()-ing UDP套接字到不同的地址

标签 c sockets udp bind

我有一个非常简单的问题,我似乎无法在任何地方找到答案:

使用 Linux C 套接字,是否可以在本地地址以外的 IP 地址上 bind() 然后 recvfrom() UDP 数据包?

即,如果主机已获得 LAN 地址 10.0.0.4,并且我希望它能够接收发送到端口 5505(例如)上地址 10.0.0.5 的 UDP 数据包,这将如何实现?

我根本找不到任何这种使用 bind/recvfrom 的例子,这看起来应该很常见。

更新

我正在尝试在多个主机之间传送数据包流。每台主机都在自己的地址上传输 UDP 数据包,任何其​​他主机都可以通过 recvfrom() 在特定地址上进行监听。

最佳答案

不,您通常不能绑定(bind)到非本地单播地址。在以太网上,此类数据包将被发送到该 IP 地址所有者的硬件地址,默认情况下,您的 NIC 甚至不会将此类数据包转发给您的内核。

使用IP Multicast可以达到你想要的效果。您将为您的应用程序选择一个特定的多播地址并绑定(bind)到该地址,然后使用 IP_ADD_MEMBERSHIP 套接字选项加入多播组。然后,您可以按常规方式使用 recvfrom()

关于c - bind()-ing UDP套接字到不同的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9352046/

相关文章:

java - 如何在亚马逊EC2上运行服务器套接字

objective-c - cocoa asyncudp套接字不发送字节流

c - 生成指针数组时出错

c - GDB - 为没有符号的二进制文件提供源代码路径

C 尝试检查无效输入

linux - 使用 Ncat 将数千行逐一发送到套接字服务器?

c - C 存储中的 void 类型变量

c++ - 通过 UDP winsock 连接发送结构,结构大小?

c - 多线程时recvfrom()返回错误10022(C)

c - 避免 P2P 网络架构中同时双向连接