我正在尝试获得Java网络编程的一些经验 . 所以我做了一个简单的基于文本的游戏 . 这就是它在服务器端的外观:

try {
        socket = new ServerSocket(PORT);
        while(true) {
           new ConnectedPlayer(socket.accept()).start();
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

这是客户:

System.setProperty("java.net.preferIPv6Addresses","true");
try {
        InetAddress ad = InetAddress.getByName("2a02:8070:b84:6b00:a1d1:30d7:346b:7c14"); 
        socket = new Socket(ad, 9001);
        output = socket.getOutputStream();
        out = new PrintWriter(output);
        in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    } catch (UnknownHostException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

上面的地址是运行服务器的机器的Ipv6地址,我通过一个检测到我的IP地址的网站获得了这个地址,它与我使用ipconfig时获得的不同,尝试了两者 . 当我在使用localhost的同一台机器上测试它时,它工作正常 . 但是,现在我想在两台不同的机器上试用它,一台在不同的网络中 . 问题是,我的互联网服务提供商显然将我限制为“双栈精简版”,这意味着如果我理解正确,我的服务器只能通过Ipv6达到 . 但那时,那里不需要端口转发 . 当我现在测试它时,它将无法连接并在一段时间后给出超时 . 我在两台机器上禁用了防火墙 .