Я создаю зашифрованный терминал связи, используя 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 для этой конкретной машины.