从udp套接字一次向多个客户端发送数据包

时间:2010-05-11 16:16:20

标签: sockets

我正在尝试编写一个将文件实例发送到多个客户端的udp服务器。现在假设我设法静态地知道这些客户端的地址(为了简单起见),现在我想发送这个数据包到这些地址。所以我究竟需要填充sockaddr结构以包含这些客户端的地址。我正在采用一个sockaddr结构数组(包含客户端地址)并尝试一次发送它们。现在问题是填充单个sockaddr结构以包含客户端地址。 我试图做那样的事情

 sa[1].sin_family = AF_INET;
 sa[1].sin_addr.s_addr = htonl(INADDR_ANY);//should'nt I replace this INADDR_ANY with client ip??
 sa[1].sin_port = htons(50002);

如果这不是正确的方法,请纠正我。 在这方面你的所有帮助将受到高度赞赏。

提前致谢,

Mawia

3 个答案:

答案 0 :(得分:2)

sin_addr应设置为目标地址。

if (! inet_aton("1.2.3.4", &sa[1].sin_addr)) {
    // Give up all hope
}
// Everything is copacetic.

答案 1 :(得分:1)

看起来你在谈论multicast。它有点难以琐碎。

查看this thread以了解如何订阅多播组(针对客户端)以及如何发送多播数据包(针对服务器端)。它是使用python讨论的,但是只使用套接字库的低级包装器,因此将示例翻译成任何语言应该非常简单。

答案 2 :(得分:0)

正如在另一个answer中所提到的,您在谈论多播,但在公共互联网上,这需要ISP支持。

application level multicast infrastructure之类的东西。 This的写作,可以追溯到2000年,描述了一种这样的方法。