如何组播到特定的IP地址?

时间:2015-12-10 06:35:36

标签: c network-programming multicast

我在http://ntrg.cs.tcd.ie/undergrad/4ba2/multicast/antony/example.html找到了一个足够简单的多播示例。在我们的网络中,我们打算在每台机器上将客户端应用程序作为守护程序运行。但是,服务器一次只需要将文件组播到特定客户端。

有没有办法将多播扩展到特定的IP地址?如果是这样,我如何扩展服务器代码呢?

否则,我想我最初会发送一个包含可接受IP列表的数据包。如果客户端发现其IP不在列表中,则它将忽略后面的数据包。这可能会起作用,因为我可以完全控制服务器和客户端代码。这是一个合理的策略吗?

1 个答案:

答案 0 :(得分:1)

如果您知道您只发送一个IP,那么服务器发送到单播IP地址就像发送到多播IP地址一样容易。设置为读取组播数据包的客户端侧的套接字也可以直接接收发送给它的单播数据包。

这是设置sin_addrstruct sockaddr_in字段用于传递给sendto()的问题。因此,如果230.1.2.3是您的多播地址,而192.168.1.2是您要发送给的特定客户端,则代替此:

addr.sin_addr.s_addr=inet_addr("230.1.2.3");

你这样做:

addr.sin_addr.s_addr=inet_addr("192.168.1.2");

使组播数据包的有效载荷包含可接受的IP列表的方法也是一个很好的解决方案。这将允许您灵活地发送到正在收听的客户端子集。只需确保数据包具有良好定义的格式。拥有一个包含所列IP数和/或主有效负载偏移量的应用程序标头是处理此问题的好方法。

编辑:

如果您想要可靠地组播文件的现成品,您可以使用我创建的名为UFTP的应用程序。如果您需要,它也有单播模式。