我正在尝试获得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达到。但那时,那里不需要端口转发。当我现在测试它时,它将无法连接并在一段时间后给出超时。我在两台机器上禁用了防火墙。