2016-04-16 2 views
0

У меня возникли проблемы с запуском сервера и клиентов на одном компьютере (mac). Я могу запустить сервер, но когда я запустил клиент, он дал мне ошибку java.net.BindException: Address already in use at java.net.PlainDatagramSocketImpl.bind0(Native Method) , насколько я знаю, что нужно что-то вызвать ssh, который нужно использовать, но я не знаю, как его использовать, чтобы решить эту проблему. БлагодаряЗапуск сервера и клиентов на одной машине (netbeans 8.1)

public class WRRCourseWork { 
public static void main(String[] args) { 
    try { 
     DatagramSocket IN_socket = new DatagramSocket(3000); 
     DatagramSocket OUT_socket = new DatagramSocket(5000); 
     IN_socket.setSoTimeout(0); 
     byte[] buffer = new byte[1024]; 
     DatagramPacket packet = new DatagramPacket(buffer, buffer.length); 
     while (true) { 
      //recive the message 

      IN_socket.receive(packet); 
      String message = new String(buffer); 
      System.out.println("Got message: " + message.trim()); 

      // send the message 
      String host = ""; 
      InetAddress addr = InetAddress.getByName(host); 
      DatagramPacket OUT_Packet = new DatagramPacket(message.getBytes(), message.getBytes().length, addr, 5000); 
      OUT_socket.send(OUT_Packet); 
      System.out.println("Sending Message: "+ message.trim()); 
     } 

    } catch (Exception error) { 
     error.printStackTrace(); 
    } 
} 

...

public class Messages { 
    public static void main(String [] args) { 
     System.out.println("hiiiiiii"); 
     //String host = "localhost"; 
     try { 
      while (true) { 
       InetAddress addr = InetAddress.getLocalHost(); 
       String message = "Hello World"; 
       DatagramPacket packet = new DatagramPacket(message.getBytes(), message.getBytes().length, addr, 4000); 
       DatagramSocket socket = new DatagramSocket(4000); 
       socket.send(packet); 
       //socket.close(); 
      } 
     } catch(Exception error) { 
      // catch all errors 
      error.printStackTrace(); 
     } 
    } 
} 
+0

Эта ошибка, скорее всего, означает, что порт, который вы назначили клиентскому приложению, уже используется. Однако эта ошибка не связана с SSH. Чтобы помочь вам, отправьте фрагмент кода, с которым вы работаете, и шаги, которые вы пробовали до сих пор. – akskap

+0

Я отправил код – MKM

ответ

0

Есть несколько вещей, которые вы можете изменить здесь:

1) Вы отправляете пакет UDP на порт 4000 от вашего клиента но прослушивание порта 3000 в вашем сервере (приемнике). Порты должны быть одинаковыми.

2) Может быть другой экземпляр вашего кода сервера, запущенного на другой вкладке Netbeans или с вашего терминала, может быть, который уже привязан к порту. Убедитесь, что у вас есть только один экземпляр для вашего кода сервера. Это решит вашу ошибку «Адрес уже используется»

3) Я также добавил «Thread.sleep (500)» в код клиента (отправителя) в бесконечном цикле while, который вы настроили. Без этого код заканчивался ошибкой «Bad File Descriptor» на моей машине. Вероятно, это был конфликт с ручкой Socket, столкнувшейся с проблемой с бесконечным циклом.

С этими изменениями обмен данными между клиентом и сервером работает нормально.

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