2016-06-12 86 views
1

我用JAVA制作了一款游戏。它有两个玩家,一个是服务器。如何使用IP和端口直接与外部客户端进行通信

计算机创建游戏并提供服务。 另一台计算机(外部)需要使用其IP和端口连接到服务器。 当它们连接时,游戏开始并且客户端播放器将其移动发送到服务器,移动在那里被计算并且游戏地图中的新客户端和服务器位置被返回并更新。

问题是:当我在同一个路由器上使用本地IP创建游戏localy,服务器和客户端时,游戏会成功启动。但是当我创建游戏并尝试从外部计算机连接时,找不到服务器。

我读了一下,问题可能是计算机防火墙或路由器的NAT(我不太了解)。好吧,我发现了一个名为STUN的东西,它说使用STUN服务器绕过防火墙和路由器阻塞,并且发现了一个免费的STUN服务器列表(here)。但我不知道该怎么办。 STUN服务器将启用服务器和客户端通信?

在没有购买任何在线服务的情况下,以及与两个玩家计算机(服务器播放器和客户端播放器)进行连接时没有端口阻塞或防火墙禁用是可能的吗?

我想分享我的游戏,但我不能要求每个玩家禁用他们的防火墙玩。 =/

+1

您只需在服务器端配置端口转发/防火墙。客户不需要做任何特别的事情。 – gudok

+0

这是关于网络和网络配置的问题,而不是编程。它是无关紧要的。 –

回答

2

如果您希望将服务器放置在网络中的任何位置(尤其是在NAT后面),则需要使用称为“NAT遍历”的黑魔法技术进行直接(对等)通信。

关于此的许多详细信息在文章Peer-to-Peer Communication Across Network Address Translators中描述。您需要从那里获得“TCP Hole Punching”部分。

无论如何,NAT遍历在所有情况下都不起作用(当NAT工作不像预期的遍历算法时,总有例外)。因此解决所有问题的最佳方法是将专用服务器放置在具有公共IP地址的地方并使用它。

相关问题