我编写了小型 TCP 聊天客户端和服务器。开始在本地主机上运行,现在我将其移至外部主机。就我个人而言,它工作得很好,因为我禁用了防火墙,但是在另一台机器上它无法获取 IOException (在创建套接字时)。尝试将我使用 9764 的端口添加到入站和出站规则中,后来完全禁用防火墙,但仍然无法获得相同的 IOException。有什么想法吗?
错误日志:http://pastebin.com/zEbFbX4Y 客户代码:https://github.com/karosas/Simple-tcp-chat-client
此处捕获异常:
try {
client = new ChatClient();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
JOptionPane.showMessageDialog(that, "Unknown host exception");
} catch (IOException e) {
JOptionPane.showMessageDialog(that, "IOException");
e.printStackTrace();
}
这会导致 ChatClient ->
public ChatClient() throws UnknownHostException, IOException {
server = new Socket(host,port);
out = new PrintWriter(server.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(
server.getInputStream()));
stdIn = new BufferedReader(new InputStreamReader(System.in));
sc = new ServerConn(server);
}
它导致 ServerConn
private BufferedReader in = null;
public ServerConn(Socket server) throws IOException {
in = new BufferedReader(new InputStreamReader(
server.getInputStream()));
}
public void run() {
String msg;
try {
while((msg = in.readLine()) != null) {
System.out.println(msg);
}
} catch(IOException e ) {
System.err.println(e);
}
}
谢谢你的一切。
最佳答案
发生的情况是,在本地主机上,连接不需要通过互联网路由器的防火墙的权限,但是当它连接到不同的互联网路由器时,如果该路由器没有将该端口列入白名单,则该路由器可以拒绝您访问服务器,因此您需要进入互联网路由器的NetBIOS(服务器的互联网路由器),然后将端口列入白名单,通常位于:
高级 > NAT > 虚拟服务器/端口转发。
有关如何执行此操作的更多信息,请阅读互联网路由器手册。
编辑: 您正在做的是尝试连接到 127.*..** 地址,这意味着它甚至不会连接到您的网络。在服务器计算机上右键单击任务栏选择任务管理器转到性能选项卡并选择 wifi 然后找到 IpV4 地址并使用它而不是 127.7.13.129
关于java - 防火墙阻止 TCP 聊天客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29509533/