2015-04-28 2 views
1

Я пытаюсь присоединиться к группе многоадресной передачи udp, чтобы получать данные udp в Windows 7 с помощью среды jdk 1.8+.Я не вижу многоадресный трафик udp в своем приложении Java, пока я вижу из wirehark

Я использую NIO DatagramChannel для получения данных. Кажется, моя программа работает хорошо, потому что я могу видеть, что udp-трафик проходит через wirehark, как только я присоединяюсь к группе многоадресной передачи. (Я не могу видеть UdP трафика в то время как моя программа не runnung.)

InetAddress group = InetAddress.getByName(UDPGROUP_IP); 
NetworkInterface ni = NetworkInterface.getByInetAddress(InetAddress.getByName(MY_IP)); 
DatagramChannel channel = DatagramChannel.open(StandardProtocolFamily.INET) ; 

channel.setOption(StandardSocketOptions.SO_REUSEADDR, true).bind(new InetSocketAddress(port)); 
channel.join(group,ni); 

channel.configureBlocking(false); 

SocketAddress sa; 
ByteBuffer buf = ByteBuffer.allocate(1024); 

sa = channel.receive(buf); 
if (sa != null){ 

    byte[] byteReceived = new byte[BYTELEN]; 
    buf.flip(); 
    buf.get(byteReceived, 0, buf.limit()); 

    DefaultLogger.logger.info("Received :{}" , new String(byteReceived)); 

} 

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

Буду признателен за любую помощь или намек.

+0

Недостаточно вашего фрагмента кода, чтобы понять, где у вас есть проблема. Попробуйте взглянуть на следующий учебник: http://examples.javacodegeeks.com/core-java/net/multicastsocket-net/java-net-multicastsocket-example/ – Nikolai

+0

Это код, в котором вы работаете? вы используете неблокирующий канал, вам будет очень, очень, очень повезло, если произойдет прибытие пакета в то время, когда вы вызываете 'channel.receive (buf);'. Вы пробовали это с блокирующим каналом? – nos

+0

Благодарим вас за консультацию, обычно канал UDP, который я хочу слушать, - это супер наводнение. Поэтому я использовал неблокирующий режим .... но я также попробовал 'channel.configureBlock (true);' чтобы выяснить проблему, но, к сожалению, не работал, я бы предположил, что может быть что-то, что я должен проверить, как rp_filter в Linux-системе ... но не знаю, что это такое ... – BinaryProbe

ответ

0

Я был дураком, о котором даже не думал о брандмауэре. Программное обеспечение для сторонних разработчиков, которое было установлено на этом компьютере, защищало мою программу для получения пакета данных.

спасибо друзьям.

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