我正在使用Java Sockets创建一个加密的通信终端。我的问题是,当我通过"localhost“或我的计算机LAN地址连接时,程序可以完美地连接并按预期工作,但当我使用我的公共IP地址连接时,连接被拒绝,并且我收到
源连接:连接超时:在java.base/java.net.DualStackPlainSocketImpl.connect0(Native方法)在java.base/java.net.DualStackPlainSocketImpl.socketConnect(Unknown源)在java.base/java.net.AbstractPlainSocketImpl.doConnect(Unknown源)在java.base/java.net.AbstractPlainSocketImpl.connectToAddress(Unknown源)在java.base/java.net.AbstractPlainSocketImpl.connect(Unknown源)在java.base/java.net.PlainSocketImpl.connect(Unknown )在
java.net.ConnectException源)在java.base/java.net.SocksSocketImpl.connect(Unknown源)在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)
下面是我的服务器的main方法:
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();}
客户端的main方法
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的原因是明显的安全原因。
编辑:是的,我已经测试了port机器,我已经测试了telnet,我已经使用了禁用的windows防火墙和端口转发,甚至为这台特定的机器启用了DMZ。
发布于 2018-09-24 04:55:45
您可以尝试自己设置超时。
有一个public synchronized void setSoTimeout(int timeout)
方法。
A timeout of zero is interpreted as an infinite timeout.
https://stackoverflow.com/questions/52469469
复制相似问题