我正在尝试构建一个客户端服务器套接字库,它将抽象发送和接收数据的复杂性。我想知道你是否有一个 UDP 服务器设置来拥有一个多播组。如果需要,它仍然可以向特定客户端发送和接收单播请求吗?还是您必须打开两个套接字才能处理任何一种类型?
1594 次
1 回答
2
您可以使用同一个套接字同时进行多播和单播。
您可以发送和接收任何交错的多播和/或单播 UDP 数据包,因此即使您想与许多不同的对等方交谈,一些多播,一些单播,您可以为此使用单个套接字,事实上它经常就应用程序的复杂性而言,这样做很有用。
需要考虑的一些事项:
在 Linux 上,您需要将bind()
UDP 套接字连接到所需的端口和 IP 地址0.0.0.0
( INADDR_ANY
)。这将使您能够接收针对任何多播地址和任何单播地址的 UDP 数据包。为 UDP 指定一个具体的 IP 地址bind()
具有过滤效果,只会让 UDP 数据包以该特定 UDP 地址为目标,这在实践中很少有用,因为所有多播服务器通常也希望允许相同的流量以单播形式到达,透明地。
在 Windows 上,绑定到固定的非零 IP 地址具有不同的语义:它将 UDP 套接字绑定到特定接口(具有给定 IP 地址的接口)。即使没有绑定到 0.0.0.0,也可以在 Windows 上发送和接收多播/单播的 UDP 流量。
于 2018-04-04T08:49:14.280 回答