我正在使用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。
答案 0 :(得分:0)
您可以尝试自行设置超时时间。
有一个
public synchronized void setSoTimeout(int timeout)
方法。
A timeout of zero is interpreted as an infinite timeout.