如何多播到特定的IP地址?
How to multicast to specific IP addresses?
我在 http://ntrg.cs.tcd.ie/undergrad/4ba2/multicast/antony/example.html 找到了一个非常简单的多播示例。在我们的网络中,我们打算 运行 客户端应用程序作为每台机器上的守护进程。但是,服务器一次只需要将文件多播给特定的客户端。
有没有办法将多播扩展到特定的 IP 地址?如果是这样,我该如何扩展服务器代码来做到这一点?
否则,我想我会首先发送一个包含可接受 IP 列表的数据包。如果客户端发现它的 IP 不在列表中,它会简单地忽略后面的数据包。这可能会起作用,因为我可以完全控制服务器和客户端代码。这是一个合理的策略吗?
如果您知道您只发送到单个 IP,那么服务器发送到单播 IP 地址就像发送到多播 IP 地址一样容易。客户端设置为读取多播数据包的套接字也可以接收直接发送给它的单播数据包。
设置 struct sockaddr_in
中的 sin_addr
字段即可传递给 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 数量 and/or 的应用程序 header 主要有效负载的偏移量是处理此问题的好方法。
编辑:
如果您想要现成的可以可靠地多播文件的东西,您可以使用我创建的名为 UFTP 的应用程序。如果需要,它还有单播模式。
我在 http://ntrg.cs.tcd.ie/undergrad/4ba2/multicast/antony/example.html 找到了一个非常简单的多播示例。在我们的网络中,我们打算 运行 客户端应用程序作为每台机器上的守护进程。但是,服务器一次只需要将文件多播给特定的客户端。
有没有办法将多播扩展到特定的 IP 地址?如果是这样,我该如何扩展服务器代码来做到这一点?
否则,我想我会首先发送一个包含可接受 IP 列表的数据包。如果客户端发现它的 IP 不在列表中,它会简单地忽略后面的数据包。这可能会起作用,因为我可以完全控制服务器和客户端代码。这是一个合理的策略吗?
如果您知道您只发送到单个 IP,那么服务器发送到单播 IP 地址就像发送到多播 IP 地址一样容易。客户端设置为读取多播数据包的套接字也可以接收直接发送给它的单播数据包。
设置 struct sockaddr_in
中的 sin_addr
字段即可传递给 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 数量 and/or 的应用程序 header 主要有效负载的偏移量是处理此问题的好方法。
编辑:
如果您想要现成的可以可靠地多播文件的东西,您可以使用我创建的名为 UFTP 的应用程序。如果需要,它还有单播模式。