【问题标题】:JavaSocket connection timed outJava Socket 连接超时
【发布时间】:2019-02-27 09:11:40
【问题描述】:

我正在使用 Java 套接字创建一个加密的通信终端。我的问题是,当我通过“localhost”或我的计算机 LAN 地址连接时,程序连接完美并按预期工作,但是当我使用我的公共 IP 地址连接时,连接被拒绝,我得到了

java.net.ConnectException:连接超时:连接 在 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。

【问题讨论】:

    标签: java sockets stack-trace


    【解决方案1】:

    您可以尝试自己设置超时。

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

    A timeout of zero is interpreted as an infinite timeout.

    【讨论】:

    • 我在服务器端和客户端都试过了,但我仍然得到与上面相同的堆栈跟踪。
    猜你喜欢
    • 2013-07-01
    • 2012-10-16
    • 1970-01-01
    • 1970-01-01
    • 2015-08-17
    • 2014-01-21
    • 2017-09-08
    • 1970-01-01
    • 2014-04-07
    相关资源
    最近更新 更多