我写过各种聊天、游戏等网络程序,但用户总是要输入服务器的ip,很不寻常。我想实现一个你可能在普通游戏中知道的服务器浏览器,它可以自动定位局域网中的服务器。我想用Java来做。
我的问题是:
这种浏览是如何工作的?还例如 WiFi,只是自动找到另一方的所有内容。
将状态包一直广播到整个局域网是否有可能也是一种好方法?哪些时间间隔有用?
我写过各种聊天、游戏等网络程序,但用户总是要输入服务器的ip,很不寻常。我想实现一个你可能在普通游戏中知道的服务器浏览器,它可以自动定位局域网中的服务器。我想用Java来做。
我的问题是:
这种浏览是如何工作的?还例如 WiFi,只是自动找到另一方的所有内容。
将状态包一直广播到整个局域网是否有可能也是一种好方法?哪些时间间隔有用?
对于 WiFi,设备会监听某个频率范围并扫描该范围内的信号。这与电视用于接收电台的过程大致相同,或者人们可能会寻找当地广播电台。
对于互联网游戏服务器,您无法扫描整个互联网。通常,这些服务提供一个主服务器,该服务器被配置为在已知端口上发送服务器列表。通常它还允许服务器更新他们的信息。
对于本地游戏服务器,通常每隔几秒左右就会有一个数据包。实际上,即使在具有各种服务请求此类数据的空闲网络上也有相当多的流量(Apple 的发现协议 Bonjour 很常见,Windows 网络发现协议也是如此)。
对于互联网游戏,有一组中央服务器托管设置游戏所需的信息。过去,这通常只是游戏主机的 IP 地址和端口,以及任何游戏信息,例如名称、地图等。
如今,由于防火墙/NAT 问题和作弊问题,大多数网络游戏实际上也通过这些服务器发送数据。这样做很昂贵。
对于本地网络上的游戏,UDP 数据包被发送到广播地址,该子网中的所有设备都会接收到这些地址。托管游戏发送包含连接位置信息的数据包,加入的人接收这些数据包以了解游戏服务器的位置。然后他们直接连接到游戏服务器。
如果您在 IP 网络上并且您的地址是 192.168.1.100,子网掩码是 255.255.255.0,那么您的广播 IP 地址是 192.168.1.255。另见: http ://en.wikipedia.org/wiki/Broadcast_address#IP_networking