0

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

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

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

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

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

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

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

4

1 回答 1

0

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

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

setsockopt 的实际参数列表应该在您的操作系统文档中可用,例如12

于 2015-02-02T13:23:51.593 回答