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