2016-01-18 1 views
0

Код в вопросе заключается в следующем:Гнездо для подключения Java истекло, работает на местном

class Server { 
    public static void main(String[] args) { 
     try { 
      ServerSocket ss = new ServerSocket(4001); 
      Socket s = ss.accept(); 
      // streams, buffer, strings, main loop and socket closing; all works fine 
     }catch(Exception e) {/*handle*/} 
    } 
} 

class Client { 
    public static void main(String[] args) { 
     try { 
      Socket s = new Socket(InetAddress.getByName("24.135.22.219"), 4001); // << Connection fails here. 
      // streams, buffer, strings, main loop and socket closing; all works fine 
     }catch(Exception e) {/*handle*/} 
    } 
} 

Это все прекрасно работает на местном, когда "serverIP" заменяется InetAddress.getByName(null). Однако, когда он заменяется моим IP-адресом, соединение не выполняется (даже если отключить брандмауэр Windows), и я получаю ошибку Connection timed out.

Файлы для тестирования: here.

+1

ли сервер, имеющий имя хоста как «ServerIP» 'ping'able? Передаются и принимаются пакеты? –

+0

@Am_I_Helpful Да, я только что попробовал его в cmd. –

+1

Если вы передаете IP-адрес «1.2.3.4», этот конструктор принимает имя хоста. Для использования конструктора IP-адреса необходимо создать InetAddress. – user1676075

ответ

1

Вы должны связать ваш ServerSocket на тот же адрес, как вы пытаетесь подключиться к:

ServerSocket ss = new ServerSocket(); 
ss.bind(new InetSocketAddress("<serverIp>", 4001)); 
Socket s = ss.accept(); 
+0

Как это полезно? –

+0

um, так как на данный момент ваш ServerSocket не привязан к внешнему IP-адресу, он привязан только к локальному хосту, поэтому вы не можете подключиться к нему. – mikea

+0

'Невозможно назначить запрошенный адрес: JVM_Bind' - это все, что я получаю. –

Смежные вопросы