接收来自不同组中的同一个socket上的组播数据

假设我想在一个linux C程序中从239.1.2.3:20000和239.4.5.6:20001接收数据。 我可以只用一个sockets吗?

我可以使用IP_ADD_MEMBERSHIP setsockopt选项套接字上的多个组,但由于端口是不同的,我不知道是否有可能以某种方式“绑定到两个端口”

谢谢。

不,您不能将套接字绑定到两个端口,您需要每个端口的套接字。

在TCP中,每个客户端需要一个套接字。 这是因为套接字需要连接“接受”。 这是通过调用服务器的侦听套接字上的accept来完成的,并且它返回一个新的套接字(带有一个新的端口),表示特定的客户端 – 服务器连接。

在UDP中,没有“连接”,而只是发送数据到套接字,并希望它到达那里(它可能不)。 如果使用UDP套接字,则所有客户端都可以向其发送数据,并且服务器不必在传入连接上调用接受。 您将不得不创建自己的协议来识别发送消息的客户端(在hte消息中,您必须解析它以查看客户端1还是客户端2)。

让我知道如果这不清楚。