gpt4 book ai didi

java - 如何让本地多人java游戏在线运行?

转载 作者:太空宇宙 更新时间:2023-11-04 09:24:41 25 4
gpt4 key购买 nike

我最近用 java 开发了相当多的多人游戏(基于棋盘/回合的游戏,在带有数据输入/输出流的 tcp 连接上运行),但它们只能在本地运行,我想更进一步,让它们在线运行,我需要更改什么才能使其运行?

似乎有很多方法可以实现这一目标,但我不知道从哪里开始,因为我对网络了解不多。

此外,我没有真正的服务器,我只使用我的家庭路由器和我的电脑。

这是我迄今为止尝试过的:

  • 我在路由器中启用了端口转发,我认为它有效(我在线使用了端口转发检查工具)
  • 我使用 noip.com 为我的公共(public) IP 创建了动态 DNS

所以服务器端至少应该没问题,我的问题是客户端,客户端的套接字无法连接到我的公共(public)IP,当我搜索解决方案时,我得出的结论是客户端不应该与服务器位于同一个局域网中,所以我使用移动热点作为第二个网络并再次尝试,但得到了相同的结果。 (连接拒绝异常)是因为移动热点(我应该使用另一个路由器)吗?或者只是一些编码调整?

这是一个最小的服务器类示例

 public static void main(String[] args) {
try {
ServerSocket ss = new ServerSocket(50895);
Socket cs = ss.accept();
DataOutputStream out = new DataOutputStream(cs.getOutputStream());
DataInputStream in = new DataInputStream(cs.getInputStream());
out.writeInt(123456);
} catch (IOException e) {
e.printStackTrace();
}
}

这是一个最小的客户端类示例

public static void main(String[] args) {
try {
String ip = Inet4Address.getByName("my Dynamic IP address").getCanonicalHostName();
System.out.println(ip);
InetSocketAddress sa = new InetSocketAddress(ip, 50895);
Socket cs = new Socket();
cs.connect(sa);
DataOutputStream out = new DataOutputStream(cs.getOutputStream());
DataInputStream in = new DataInputStream(cs.getInputStream());
System.out.println("received : " + in.readInt());
} catch (IOException e) {
e.printStackTrace();
}
}

我尝试过的方法总是给我一个连接拒绝异常,因此任何解决方案将不胜感激。

最佳答案

我通过虚拟局域网(使用 LogMeIn Hamachi)找到了解决该问题的软件,该软件主要用于创建游戏服务器,您只需要创建一个帐户和一个网络,以便您的 friend 可以加入它,之后一切都应该很好,并且可以像本地托管一样运行。

您可以通过here下载该软件但是有很多替代方案可供选择,其中一个可以免费为您提供最多 5 个人的网络连接,这不是最好的,但仍然是一个免费的解决方案。

我仍然想要更多不需要第三方软件的 java 解决方案来解决这个问题。

关于java - 如何让本地多人java游戏在线运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57871703/

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