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