假设我想在 linux C 程序中从 239.1.2.3:20000 和 239.4.5.6:20001 接收数据。我可以只用一个插座吗?
我当然可以使用 IP_ADD_MEMBERSHIPsetsockopt
选项加入套接字上的多个组,但是,由于端口不同,我不确定是否有可能以某种方式“绑定到两个端口”
不,您不能将套接字绑定到 2 个端口,每个端口都需要一个套接字。
在 TCP 中,每个客户端需要一个套接字。这是因为套接字需要“接受”连接。这是通过在服务器的侦听套接字上调用 accept 来完成的,它返回一个新的套接字(带有一个新端口),它表示特定的客户端-服务器连接。
在 UDP 中,没有“连接”,而是您只需将数据发送到套接字并希望它到达那里(它可能不会)。如果您使用 UDP 套接字,您的所有客户端都可以向它发送数据,并且您的服务器不必在传入连接上调用接受。您必须创建自己的协议来识别发送消息的客户端(在 hte 消息内部,即您必须解析它以查看其客户端 1 还是客户端 2)。
如果不清楚,请告诉我。