2015-04-11 2 views
2

Я начинаю с программирования сети JAVA. Я написал класс сервера, который использует ServerSocket для прослушивания порта 3333. Ниже приведен фрагмент кода.Java-клиентский сокет возвращает исключение тайм-аута соединения

try { 
      servSock = new ServerSocket(portNumber); 
      //servSock.setSoTimeout(100000); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     Socket link = null; //Step 2. 

     while(true){ 
      try { 
       link = servSock.accept(); 

Это прекрасно работает, поскольку вызов accept блокирует программу правильно.

Но при подключении к одному порту с одной и той же машины через клиент, используя приведенный ниже код

Socket link = new Socket(); 
link.connect(new InetSocketAddress(InetAddress.getLocalHost(),3333), 50000); 

Он бросает ConnectionTimedout через некоторое время.

Я не могу подключиться к серверу !. Пожалуйста, помогите кому-нибудь.

+1

попытайтесь напечатать значение 'InetAddress.getLocalHost()'. Также попробуйте заменить 'InetAddress.getLocalHost()' на 'localhost' –

+1

Wow, который сработал! :) борется с этим уже 3 часа. Большое спасибо :) –

+1

В чем проблема с InetAddress.getLocalhost? по крайней мере, это то, что есть во многих учебниках. –

ответ

1

Попробуйте заменить InetAddress.getLocalHost() на localhost.

Причина в том, что InetAddress.getLocalHost() фактически возвращает имя хоста машины и IP-адрес, связанный с этим именем хоста.

Как уже упоминалось here:

InetAddress.getLocalHost() не делать то, что большинство людей думают, что это делает. Он фактически возвращает имя хоста машины и IP-адрес, связанный с этим именем хоста. Это может быть адрес, используемый для подключения к внешнему миру. Это не так. Это зависит только от конфигурации вашей системы.

Указанный номер InetAddress.getLocalHost()here.

Надеюсь, это поможет.

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