JavaSocket连接超时

时间:2018-09-23 19:20:04

标签: java sockets stack-trace

我正在使用Java套接字创建一个加密的通信终端。我的问题是,当我通过“ localhost”或计算机的局域网地址进行连接时,该程序可以正常连接并按预期运行,但是当我使用公共IP地址进行连接时,该连接被拒绝并且得到了

  

java.net.ConnectException:连接超时:connect     在java.base / java.net.DualStackPlainSocketImpl.connect0(本机方法)     在java.base / java.net.DualStackPlainSocketImpl.socketConnect(未知源)     在java.base / java.net.AbstractPlainSocketImpl.doConnect(未知来源)     在java.base / java.net.AbstractPlainSocketImpl.connectToAddress(未知源)     在java.base / java.net.AbstractPlainSocketImpl.connect(未知源)     在java.base / java.net.PlainSocketImpl.connect(未知源)     在java.base / java.net.SocksSocketImpl.connect(未知源)     在java.base / java.net.Socket.connect(未知源)     在java.base / java.net.Socket.connect(未知源)     在java.base / java.net.Socket。(未知来源)     在java.base / java.net.Socket。(未知来源)     在net.wolvenservices.clientcomms.Launcher.main(Launcher.java:27)

这是服务器的主要方法:

try{
   serv = new ServerSocket(200);
   sock = serv.accpet();
   System.out.println(sock.getInetAddress() + ": user has connected");
   in = new DataInputStream(sock.getInputStream());
   out = new DataOutputStream(sock.getOutputStream());
}catch(IOException e){e.printStackTrace();}

客户端的主要方法

try{
   sock = new Socet("[MyPublicIP]", 200);  //this is line 27
   in = new DataInputStream(sock.getInputStream());
   out = new DataOutputStream(sock.getOutputStream());
   ...
catch(IOException e) {e.printStackTrace();}

我不提供MyPublicIP的原因是出于明显的安全原因。

编辑: 是的,我已经测试了对计算机的ping操作,已经测试了telnet,并且使用了禁用的Windows防火墙和端口转发功能,甚至为此特定机器启用了DMZ。

1 个答案:

答案 0 :(得分:0)

您可以尝试自行设置超时时间。

有一个 public synchronized void setSoTimeout(int timeout)方法。

A timeout of zero is interpreted as an infinite timeout.