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

标签 c network-programming multicast

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

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

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

最佳答案

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

只需在用于传递给 sendto()struct sockaddr_in 中设置 sin_addr 字段即可。因此,如果 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 数量和/或主要负载偏移量的应用程序 header 是处理此问题的好方法。

编辑:

如果您想要现成的能够可靠地多播文件的东西,您可以使用我创建的名为 UFTP 的应用程序。 。如果您需要的话,它还有单播模式。

关于c - 如何组播到特定的IP地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34195237/

相关文章:

c - 无法链接预编译文件

c# - 比较通过 NetworkStream 发送到服务器/从服务器发送的值

c# - Windows 8 计算机无法迭代工作组成员?

python - 不同网络上的 UDP 组播

c - 共享内存段dll单独加载其实例

objective-c - 在 C/C++ 中使用 THIS->

c - 使用 newSocket.sin_port = htons(portNumber) 将端口号分配给套接字时出错;

windows - Windows 7 上的多播套接字

c++ - 带有 epgm 的 ZeroMQ PUB/SUB 无法接收同一主机上进程发送的消息

c++ - 无法从 C 应用程序访问 C++ DLL 中的变量