如何在网络中广播消息?

Zen*_*net 6 c sockets network-programming

我正在研究用C编写的客户端 - 服务器应用程序.我想向本地网络上的所有可用机器广播消息.

如何使用C中常用的套接字系统调用来做到这一点?

Enr*_*sso 6

只需将消息发送到您的子网的广播地址(对于192.168.0.0/24就是192.168.0.255),或仅广播到255.255.255.255。


Adr*_*son 6

您必须使用UDP通过网络发送广播消息.通过创建套接字时socket()功能,指定AF_INETfamily参数,并SOCK_DGRAMtype参数.在某些系统上,您必须通过将SO_BROADCAST套接字选项设置为1 来启用广播数据包的发送,使用setsockopt().

然后使用sendto()函数调用发送数据报,并255.255.255.255用作目标地址.(对于数据报套接字,您不需要调用connect(),因为没有'连接').

在标准实现中,该地址广播到本地网络中的所有计算机,这意味着该数据包不会跨越网关边界,并且不会被使用与发送计算机的网络掩码不同的网络掩码的计算机接收.

  • @AlexisWilke:224.0.0.0/4范围是为多播保留的。多播与广播完全不同:服务是分组的,特定主机需要“加入”多播组才能接收发送到该组的多播数据包,某些组定义明确并分配了特定的 IP 地址。但请注意,某些组的行为类似于广播组(例如 224.0.0.1)。另请注意,ipv4 并不强制支持多播。请参阅[wikipedia](https://en.wikipedia.org/wiki/Multicast_address)和[tldp](https://www.tldp.org/HOWTO/Multicast-HOWTO.html) (2认同)