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

How to make a local multiplayer java game runs online?

我最近在 java 中开发了相当数量的多人游戏(基于 board/turn 的游戏 运行 在与数据 in/out 流的 tcp 连接上连接)但是它们只在本地工作,我想更进一步,使它们 运行 在线,我需要更改什么才能使其工作?

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

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

到目前为止,这是我尝试过的方法:

所以服务器端至少应该没问题,我的问题出在客户端,客户端的套接字无法连接到我的 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解决方案。