如何通过 UDP 套接字进行广播?

Posted

技术标签:

【中文标题】如何通过 UDP 套接字进行广播?【英文标题】:How to broadcast over UDP Sockets? 【发布时间】:2015-02-02 11:19:44 【问题描述】:

我正在尝试通过 UDP 协议通过注册的多个客户端广播消息。

我相信我们需要以下两个命令来通过套接字发送和接收:

sendto(sock,buffer,
            strlen(buffer),0,(const struct sockaddr *)&server,length);

recvfrom(sock,buffer,256,0,(struct sockaddr *)&from, &length);

如我们所见,我们需要 6 个参数来表示相同,倒数第二个是收件人的地址。在客户端到服务器的情况下,我们有地址。 但是从服务器到客户端,我们只有收到消息的最后一个客户端的地址。

我也尝试过存储至少一次连接到服务器的所有套接字的地址,以便我们可以使用 sendto(),但是由于所有客户端都在同一台机器上运行,&from 似乎是相同的.

有哪些替代品?我哪里错了?我只是想向本地机器上运行的所有客户端广播一条消息。 ?

【问题讨论】:

我很困惑。你的意思是multicast 而不是broadcast 我想同时向所有客户端发送消息。 检查struct sockaddr_in 结构。有一个东西叫做端口号 [sin_port]。 连接也是一样的,对吧?因为只有一台服务器。 所以?你的问题出在服务器端,对吗?请添加更多信息并本地化您手头的问题。 【参考方案1】:

默认情况下,您的网络堆栈实现可能不允许发送 UDP 广播。您需要在某些环境中启用广播:

int allow_broadcast = 1;
setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (void*) &allow_broadcast, sizeof(allow_broadcast));

setsockopt 的实际参数列表应该可以在您的操作系统文档中找到,例如1 或2。

【讨论】:

以上是关于如何通过 UDP 套接字进行广播?的主要内容,如果未能解决你的问题,请参考以下文章

Python - 使用套接字设置源端口号

socket发送UDP广播实现聊天室功能

socket发送UDP广播实现聊天室功能

Python网络编程—UDP套接字广播

udp为啥收不到广播中的数据,该怎么处理

环回中的 WinSock UDP 套接字创建顺序。