Тайм-аут соединения JavaSocket - PullRequest
0 голосов
/ 23 сентября 2018

Я создаю зашифрованный терминал связи, используя Java Sockets.Моя проблема в том, что когда я подключаюсь через локальный адрес или локальный адрес моего компьютера, программа подключается идеально и работает как положено, но когда я подключаюсь, используя свой публичный 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 /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, по очевидным причинам безопасности.

Редактировать: да, я проверил эхо-тестирование машины, я проверил telnet и использовал отключенный брандмауэр Windows и перенаправленный порт,даже включение DMZ для этой конкретной машины.

1 Ответ

0 голосов
/ 23 сентября 2018

Вы можете попытаться установить тайм-аут самостоятельно.

Существует метод public synchronized void setSoTimeout(int timeout).

A timeout of zero is interpreted as an infinite timeout.

...