2014-12-10 2 views
1

У меня в сети несколько серверов, которые отправляют широковещательное сообщение. Со следующим клиентом я пытаюсь захватить все широковещательные сообщения со всех серверов. Отправляющая часть отлично работает (не входит в этот пост), но моя получающая часть не работает ... Я продолжаю получать «SocketException: не многоадресный адрес», что я делаю неправильно?Java - SocketException: не многоадресный адрес

public static String[] capture(int port) { // port is always 63332 
    ArrayList<String> clients = new ArrayList<>(); 

    InetAddress address = Utilities.getBroadcastAddress(); // I get "/192.168.2.255" here 

    MulticastSocket socket = null; 

    try { 
     socket = new MulticastSocket(port); 
     socket.setSoTimeout(2000); 
     socket.joinGroup(address); // this part throws the exception 

     DatagramPacket packet; 
     byte[] packetContent; 

     while (true) { 
      packetContent = new byte[1024]; 
      packet = new DatagramPacket(packetContent, packetContent.length); 

      try { 
       socket.receive(packet); 

       String client = packet.getAddress() + ":" + packet.getPort(); 

       clients.add(client); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } catch (SocketException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    if(socket != null) { 
     try { 
      socket.leaveGroup(address); 
     } catch(IOException e) { 
      e.printStackTrace(); 
     } 

     socket.close(); 
    } 

    return clients.toArray(new String[clients.size()]); 
} 

ответ

2

Вы вводите в заблуждение вещание с помощью многоадресной передачи. Многоадресный адрес не является широковещательным адресом. Решите, что вы делаете. Если вы получаете многоадресные рассылки, вам необходимо присоединиться к правильному многоадресному адресу, независимо от того, что это такое. Если вы получаете трансляции, не присоединяйтесь ни к чему.

+0

Я не знаю, о чем я думал ... спасибо. – Eric