我正在尝试编写一个将文件实例发送到多个客户端的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
答案 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年,描述了一种这样的方法。