我在JAVA写了一个游戏。它有两个玩家,一个是服务器。
计算机创建游戏并为其提供服务。 另一台计算机(外部)需要使用其IP和端口连接到服务器。 当他们连接时,游戏开始,客户端玩家将其移动发送到服务器,在那里计算移动,并返回和更新游戏地图中的新客户端和服务器位置。
问题是:当我使用本地IP创建游戏localy,同一路由器中的服务器和客户端时,游戏开始成功。但是当我创建游戏并尝试从外部计算机连接时,服务器还没有找到。
我读了一下,问题可能是计算机防火墙或路由器的NAT(我没有太多理解)。好吧,我发现了一个名为STUN的东西,据说它使用STUN服务器绕过防火墙和路由器阻塞,并找到了一个免费的STUN服务器列表(here)。但我不知道如何处理它。 STUN服务器将启用服务器和客户端通信吗?
可以在没有购买任何在线服务的情况下,使用两台播放器计算机(服务器播放器和客户端播放器),在没有端口或防火墙禁用的情况下成功连接?
我想分享我的游戏,但我不能要求每个玩家禁用防火墙。 = /
答案 0 :(得分:2)
对于直接(点对点)通信,如果您想将服务器放置在网络中的任何位置(特别是在NAT后面),您需要使用称为" NAT Traversal"的黑魔法技术。
有关此问题的许多细节在文章Peer-to-Peer Communication Across Network Address Translators中有所描述。你需要" TCP打孔"从那里开始。
无论如何,NAT遍历在所有情况下都不起作用(当NAT工作不像遍历算法所期望的那样时,总会有异常)。因此,解决所有问题的最佳方法是将专用服务器放置在具有公共IP地址的地方并使用它。