我正在为游戏服务器编写网络后端。
我计划使用多播,以便客户端可以通过多播套接字绑定到服务器。然后,服务器可以向组中的所有成员发送游戏更新。
但是,我想知道是否可以通过与多播套接字相同的端口将反向- can客户机发送单播数据到服务器
我已经编写了一个基于Java教程的测试程序(它只发送服务器->客户机),但是我无法适应双向通信。我正在获取客户端上的Address already in use和Not a multicast address错误。
我的怀疑是这样的双向通信不可能使用同一个端口吗?必须使用不同的端口(一个用于多播服务器->客户端,一个用于单播客户端->服务器)?
(我是用Java做的,但我更感兴趣的是网络方面的事情-这是可能的,还是实现方面的-我该怎么做呢?)
发布于 2015-06-15 13:49:11
是的,这是可能的。
假设具有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。服务器上只需要一个套接字,每个客户端上只需要一个套接字。
发布于 2015-05-19 01:24:18
客户端可以通过与多播套接字相同的端口向服务器发送单播数据吗?
是的,只要套接字不绑定到多播地址。显然,Linux需要这一点,但其他平台允许将其绑定到0.0.0.0。
请注意,您询问的不是“双向多播”。它是一个方向的多播,另一个方向是单播。
https://stackoverflow.com/questions/30315109
复制相似问题