如何让本地多人java游戏在线运行?
How to make a local multiplayer java game runs online?
我最近在 java 中开发了相当数量的多人游戏(基于 board/turn 的游戏 运行 在与数据 in/out 流的 tcp 连接上连接)但是它们只在本地工作,我想更进一步,使它们 运行 在线,我需要更改什么才能使其工作?
似乎有很多方法可以实现,但我不知道从哪里开始,因为我对网络了解不多。
除此之外我没有真正的服务器,我只使用我的家庭路由器和我的电脑。
到目前为止,这是我尝试过的方法:
- 我在我的路由器中启用了端口转发,我认为它有效(我使用了在线端口转发检查工具)
- 我使用 noip.com
为我的 public ip 创建了一个动态 DNS
所以服务器端至少应该没问题,我的问题出在客户端,客户端的套接字无法连接到我的 public ip,当我搜索解决方案时,我得出的结论是客户端不应该在服务器所在的同一个局域网中,所以我使用移动热点作为第二个网络并再次尝试,但得到了相同的结果。 (连接被拒绝异常)
是因为移动热点(我应该使用另一个路由器)吗?
还是只是一些编码调整?
这是一个最小的服务器class示例
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();
}
}
这是一个最小客户端 class 示例
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)找到了解决问题的软件,它基本上用于创建游戏服务器,您只需要创建一个帐户和一个网络,以便您的朋友可以加入,之后一切应该没问题,就像在本地托管一样运行。
您可以通过 here 下载该软件,但有很多替代方案可供选择,其中一个最多可让您在网络上免费连接 5 个人,这不是最好的,但仍然是一个免费的解决方案。
我仍然想要更多不需要第三方软件的java解决方案。
我最近在 java 中开发了相当数量的多人游戏(基于 board/turn 的游戏 运行 在与数据 in/out 流的 tcp 连接上连接)但是它们只在本地工作,我想更进一步,使它们 运行 在线,我需要更改什么才能使其工作?
似乎有很多方法可以实现,但我不知道从哪里开始,因为我对网络了解不多。
除此之外我没有真正的服务器,我只使用我的家庭路由器和我的电脑。
到目前为止,这是我尝试过的方法:
- 我在我的路由器中启用了端口转发,我认为它有效(我使用了在线端口转发检查工具)
- 我使用 noip.com 为我的 public ip 创建了一个动态 DNS
所以服务器端至少应该没问题,我的问题出在客户端,客户端的套接字无法连接到我的 public ip,当我搜索解决方案时,我得出的结论是客户端不应该在服务器所在的同一个局域网中,所以我使用移动热点作为第二个网络并再次尝试,但得到了相同的结果。 (连接被拒绝异常) 是因为移动热点(我应该使用另一个路由器)吗? 还是只是一些编码调整?
这是一个最小的服务器class示例
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();
}
}
这是一个最小客户端 class 示例
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)找到了解决问题的软件,它基本上用于创建游戏服务器,您只需要创建一个帐户和一个网络,以便您的朋友可以加入,之后一切应该没问题,就像在本地托管一样运行。
您可以通过 here 下载该软件,但有很多替代方案可供选择,其中一个最多可让您在网络上免费连接 5 个人,这不是最好的,但仍然是一个免费的解决方案。
我仍然想要更多不需要第三方软件的java解决方案。