[英]Bidirectional UDP Multicast
我正在为游戏服务器编写网络后端。
我计划使用多播,以便客户端可以通过多播套接字绑定到服务器。 然后,服务器可以将游戏更新发送给该组的所有成员。
但是,我想知道是否可以做相反的工作 -客户端可以通过与多播套接字相同的端口将单播数据发送到服务器吗?
我已经基于Java教程 (仅发送服务器->客户端)编写了一个测试程序,但是我无法使其适应双向通信。 我正在Address already in use
并且在客户端上Not a multicast address
错误。
我是否怀疑使用同一端口无法进行此类双向通信? 我是否必须使用其他端口(一个用于多播[服务器->客户端],一个用于单播[客户端->服务器])?
(我正在用Java进行此操作,但我对网络方面的事情更感兴趣,这是可能的还是实现方面的。 我该怎么做 。)
是的,这是可能的。
假设IP地址为192.168.1.2的服务器希望将多播消息发送到224.1.2.3端口2222并接收单播重新放置在端口1111上。在服务器端,将数据报套接字绑定到地址/端口0.0.0.0:1111。 在客户端,将数据报套接字绑定到0.0.0.0:2222,然后为多播组224.1.2.3注册该套接字。 绑定其本地端口时,服务器可以选择指定192.168.1.2,但这不是必需的。 客户端必须绑定到0.0.0.0,否则Linux系统将无法接收多播数据包。
当服务器要发送时,它同时指定消息和目标的IP /端口。 在这种情况下,服务器使用其数据报套接字发送到224.1.2.3:2222,尽管您以后可以根据需要将其发送到其他地址/端口。 生成的数据包的源IP /端口为192.168.1.2:1111,目标IP /端口为224.1.2.3:2222。
为了使客户端发送回服务器,它同时指定了消息和目标的IP /端口,本例中为192.168.1.2:1111。 因此,生成的数据包的源IP /端口为{client_IP}:2222,目标端口为192.168.1.2:1111。 服务器上只需要一个插槽,每个客户端上只需要一个插槽。
客户端可以通过与多播套接字相同的端口将单播数据发送到服务器吗?
是的,只要套接字未绑定到多播地址即可。 显然,Linux要求这样做,但是其他平台允许您将其绑定到0.0.0.0。
请注意,您要问的不是“双向多播”。 它在一个方向上是多播,在另一个方向上是单播。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.