如何通过 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 套接字进行广播?的主要内容,如果未能解决你的问题,请参考以下文章