MulticastSocket в Java: BindException все время - PullRequest
0 голосов
/ 04 мая 2011

Я кодирую базовое приложение, чат, который отправляет сообщения через сеть, используя многоадресную и одноадресную передачу, в зависимости от ситуации. До сих пор никаких проблем, пока некоторое время назад я не начал часть MulticastSocket. У меня есть BindException, когда я запускаю этот основной код (я удалил все другие мои методы, которые не относятся к части с моей проблемой):

private MulticastSocket socket_multicast;
private int port;
private InetAddress multicast_address;

public void setPort(int p) {
    port = p;
}

public void setMulticastAddress(String s) {
    try {
        multicast_address = InetAddress.getByName(s);
    } catch (IOException e) {
         e.printStackTrace();
    }
}

public void joinGroup() {

    System.out.println("Port : "+port+"\n @IP : "+multicast_address+"\n");
    try {
        socket_multicast = new MulticastSocket(port);
    } catch (IOException e) {
        e.printStackTrace();
    }

    try {
        socket_multicast.joinGroup(multicast_address);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

Когда я запускаю этот кусок кода, у меня появляется следующая ошибка (я поместил 225.1.1.1 и 4567 в GUI):

 Port : 4567
 @IP : /225.1.1.1
 java.net.BindException: Address already in use
 at java.net.PlainDatagramSocketImpl.bind0(Native Method)
 at       
 java.net.AbstractPlainDatagramSocketImpl.bind(AbstractPlainDatagramSocketImpl.java:85)
 at java.net.DatagramSocket.bind(DatagramSocket.java:373)
 at java.net.MulticastSocket.<init>(MulticastSocket.java:165)
 at java.net.MulticastSocket.<init>(MulticastSocket.java:130)
 at networkinterface.MulticastIF.joinGroup(MulticastIF.java:61)

Независимо от того, какую комбинацию IP и порта я установил, всегда возникает одна и та же ошибка. Я даже перезагрузил компьютер, он не изменился.

Примечания : Чтобы проверить, я делаю щелчок правой кнопкой мыши в своем классе с основным в представлении Package, затем "Запуск от имени -> Java-приложение". Делает ли Eclipse какую-то виртуальную машину, когда я это делаю, или использует только адрес обратной связи 127.0.0.1, или как? Когда я печатаю результат InetAddress.getLocalHost (); У меня есть "akee-netbook / 127.0.1.1". Поскольку я использую Unicast и Multicast, может быть, он использует только адрес обратной связи и пытается привязать к уже привязанному адресу. Если так, как я могу правильно протестировать свое приложение? Я не знаю, если я проясняюсь, если нет, скажите мне!

И последнее. Почему при печати моего IP-адреса возникает косая черта? Это будет проблемой позже? или это что-то из метода toString ()?

Ответы [ 3 ]

0 голосов
/ 04 мая 2011

Относительно toString (), см. Javadocs для InetAddress.toString ()

0 голосов
/ 04 мая 2011

Да, я знаю, где я ошибся.Я использую сокет UDP (DatagramSocket) с @ IP / портом, а затем пытаюсь снова связать этот же @ IP / порт с MulticastSocket.Поскольку Multicast использует UDP, я предположил, что мог бы использовать один и тот же сокет для трафика Unicast и Multicast, кажется, что он не работает таким образом.В любом случае, спасибо за ваши ответы и извините за то, что вы нашли время для решения проблемы n00b, решаемой двумя символами:

    socket_multicast = new MulticastSocket(port);

заменено на

    socket_multicast = new MulticastSocket(port+1);

-_- "

0 голосов
/ 04 мая 2011

Вы используете это в системе Linux?Если да, вы скомпилировали многоадресную рассылку в ядро ​​или загрузили модуль для нее?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...