c++ - 将套接字绑定(bind)到特定网络

标签 c++ udp

我的计算机连接到多个网络,比如 Network ANetwork B。 我只想从网络 B 接收 UDP 广播数据包。

目前,我正在打开一个 UDP 套接字并将其绑定(bind)到 INADDR_ANY。

sockaddr_in address;
address.sin_family = AF_INET;
address.sin_addr.s_addr = INADDR_ANY;
address.sin_port = htons( (unsigned short) 11000 );

if ( bind( handle, (const sockaddr*) &address, sizeof(sockaddr_in) ) < 0 )
{
       //Operation Failed!
       return false;
}

如何确保我只会收到来自网络 B 的消息?

最佳答案

广播地址将以全 1 位结束,因此假设“hoNetAddr”是主机排序的地址:

uint32_t hoBcastAddr = (hoNetAddr & hoNetMask) | (~hoNetMask);
// e.g. 192.168.0.0/255.255.255.0 =>
//      (C0A80000 & FFFFFF00) | (/*inverted netmask*/ 000000FF)
// broadcast is: C0A800FF
address.sin_addr.s_addr = htonl(hoBcastAddr);

(假设 IPv4)

关于c++ - 将套接字绑定(bind)到特定网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17269983/

相关文章:

c++ - 从继承自模板的 dll 导出类

c++ - C++ 的默认复制构造函数本质上是不安全的吗?迭代器从根本上来说也是不安全的吗?

c++ - 什么是 GCC 默认包含目录?

c++ - QThread 的多个实例可以引用同一个操作系统线程吗?

java - java中字节数组到十进制的转换

iis - 在生产环境中使端口范围从 1024 到 65535 是否安全

java - 无法绑定(bind)到客户端中的广播地址 -- Java/Scala

c++ - 'avct' 是合法的 long 值还是合法的 var/const?

c++ - 二叉树的递归搜索同时返回 true 和 false

PHP套接字UDP通信