【问题标题】:How to broadcast a message in a network?如何在网络中广播消息?
【发布时间】:2010-02-27 13:12:23
【问题描述】:

我正在开发一个用 C 编写的客户端-服务器应用程序。我想向本地网络上所有可用的机器广播一条消息。

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

【问题讨论】:

  • “在网络中”太模糊了。您是指本地网络吗?
  • 我的意思是在本地网络中。谢谢 bortzmeyer,我找到了答案:192.168.0.255 :)

标签: c sockets network-programming


【解决方案1】:

只需将消息发送到您子网的广播地址,对于 192.168.0.0/24 来说是 192.168.0.255,或者只是广播到 255.255.255.255。

【讨论】:

    【解决方案2】:

    您必须使用 UDP 通过网络发送广播消息。使用socket() 函数创建套接字时,请为family 参数指定AF_INET,为type 参数指定SOCK_DGRAM。在某些系统上,您必须通过使用setsockopt()SO_BROADCAST 套接字选项设置为1 来启用广播数据包的发送。

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

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

    【讨论】:

    • 使用255.255.255.255224.0.0.0 IP 地址有什么区别?
    • @AlexisWilke :224.0.0.0/4 范围保留用于多播。多播与广播完全不同:服务被分组,特定主机需要“加入”多播组才能接收发送到该组的多播数据包,一些组定义明确并分配了特定的IP地址。但请注意,某些组表现为广播组(例如 224.0.0.1)。另请注意,对 ipv4 的多播支持不是强制性的。请参阅wikipediatldp
    【解决方案3】:

    看看 udp 套接字。

    我推荐beej guide,看看6.3 Datagram Sockets

    【讨论】:

      【解决方案4】:

      您可以使用特殊地址 255.255.255.255 向本地网络上的每台计算机发送广播消息。

      有关详细信息,请参阅IP Network Broadcasting 部分。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-09-27
        • 1970-01-01
        • 2010-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多