如何通过UDP套接字广播?

时间:2015-02-02 11:19:44

标签: c sockets udp broadcasting

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

我认为我们需要以下两个命令来发送和接收套接字:

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

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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