gpt4 book ai didi

java - 如何使用IP和端口直接与外部客户端通信

转载 作者:行者123 更新时间:2023-12-02 03:33:17 26 4
gpt4 key购买 nike

我做了一个用JAVA编写的游戏。它有两名玩家,其中一名是服务器。

计算机创建游戏并提供服务。另一台计算机(外部)需要使用其 IP 和端口连接到服务器。当它们连接时,游戏开始,客户端玩家将其 Action 发送到服务器,在服务器上计算 Action ,并返回并更新游戏 map 中的新客户端和服务器位置。

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

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

是否可以在不购买任何在线服务的情况下,使用两台玩家计算机(服务器玩家和客户端玩家),在不禁用端口或防火墙的情况下成功连接?

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

最佳答案

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

文章 Peer-to-Peer Communication Across Network Address Translators 中描述了有关此问题的许多详细信息。 。您需要那里的“TCP Hole Punching”部分。

无论如何,NAT 遍历并非在所有情况下都有效(当 NAT 未按遍历算法预期工作时,总会有异常(exception))。因此,解决所有问题的最佳方法是在具有公共(public)IP地址的地方放置专用服务器并使用它。

关于java - 如何使用IP和端口直接与外部客户端通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37771614/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com