2015-07-05 1 views
0

У меня есть программа для общения с сокетами, один многоадресными и одноадресными другими, но при попытке запустить как я получаю следующее сообщение об ошибке:Адрес уже используется: JVM_Bind. Розетки Чата

java.net.BindException: Address already in use: JVM_Bind 
at java.net.DualStackPlainSocketImpl.bind0(Native Method) 
at java.net.DualStackPlainSocketImpl.socketBind(DualStackPlainSocketImpl.java:96) 
at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:376) 
at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:175) 
at java.net.ServerSocket.bind(ServerSocket.java:376) 
at java.net.ServerSocket.<init>(ServerSocket.java:237) 
at java.net.ServerSocket.<init>(ServerSocket.java:128) 
at Chat.ChatPrivado_Servidor$Hilo.run(ChatPrivado_Servidor.java:47) 

Видимо ошибка находится в классе ChatPrivado_Servidor с резьбой, Я поставил их код, чтобы помочь мне, пожалуйста. Извините плохой английский

Класс ChatPrivado_Servidor

class Hilo extends Thread { 
    String msgin = ""; 
    public void run() { 
     try{ 
     ss = new ServerSocket(1500); 
     s = ss.accept(); 
     din = new DataInputStream(s.getInputStream()); 
     dout = new DataOutputStream(s.getOutputStream()); 

     while(!msgin.equals("exit")){ 
      msgin = din.readUTF(); 
      textarea.setText(textarea.getText().trim()+"\n "+msgin); 
     } 
    }catch(Exception e){ 
     e.printStackTrace(); 
    } 
    } 
} 

класса ChatMulticast

private void send(String mensaje) throws IOException { 
    String mensaje2 = nombre + ": " + mensaje; 
    byte[] buffer_e = mensaje2.getBytes(); 
    DatagramPacket paquete_enviado = new DatagramPacket(buffer_e, 0, buffer_e.length, direccion, 4321); 
    socket.send(paquete_enviado); 
} 

class Reader extends Thread { 
    public void run() { 
     byte[] buffer_r = new byte[512]; 
     DatagramPacket paquete_recibido = null; 

     while (true) { 
      try { 
       paquete_recibido = new DatagramPacket(buffer_r, buffer_r.length); 
       socket.receive(paquete_recibido); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      String linea = new String(paquete_recibido.getData(), 0, paquete_recibido.getLength()); 
     } 
    } 
} 

ChatMulticast(String n) { 
    nombre = n; 
    try { 
     direccion = InetAddress.getByName("228.5.6.7"); 
     socket = new MulticastSocket(4321); 
     socket.joinGroup(direccion); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     System.exit(1); 
    } 

}

Я поставил слишком порты и не принимает меня ни

+0

Возможный дубликат [Как устранить ошибку «java.net.BindException: Address уже используется: JVM \ _Bind»?] (Http://stackoverflow.com/questions/12737293/how-do-i- resolve-the-java-net-bindexception-address-already-in-use-jvm-bind) –

+0

Я пробовал все решения этого сообщения, и ничего не работает. любой порт, который все еще не работает. Это что-то делать, когда я запускаю эти два класса. – Jadsk

+0

Поскольку трассировка стека показывает ошибку в классе ChatPrivado_Servidor, я предполагаю, что вы запускаете эту секунду. Вы уверены, что ошибка является результатом одновременного запуска обоих? Или это просто, когда вы запускаете ChatPrivado_Servidor? Я не вижу, чтобы вы вызывали s.close() или (самое главное) ss.close() в любой точке показанного кода. Если серверный сокет не закрыт, то запуск программы снова даст вам ошибку «адрес уже используется», поскольку вы никогда не закрывали последний сервер. Не забудьте закрыть все ресурсы в конце вашей программы тем или иным способом. – Nerdizzle

ответ

1

Похоже, вы пытаясь создать несколько ServerSockets на том же порту.

Неправильная структура кода.

Вы должны создать единый ServerSocket, то есть цикл, который принимает соединения и порождает поток для каждого принятого сокета, а другой класс, который обеспечивает Runnable для этих потоков, один экземпляр для каждого потока, у которого run() способ содержит чтение цикла запросы и ответы на них до тех пор, пока не будет обнаружен конец потока.

Предлагаю вам прочитать раздел «Пользовательская сеть» учебника Oracle Java.

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

  • Нет связанных вопросов^_^