Я пытаюсь присоединиться к группе многоадресной передачи 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, которые до сих пор хорошо работали. Я не могу найти подсказки, чтобы понять это.
Буду признателен за любую помощь или намек.
Недостаточно вашего фрагмента кода, чтобы понять, где у вас есть проблема. Попробуйте взглянуть на следующий учебник: http://examples.javacodegeeks.com/core-java/net/multicastsocket-net/java-net-multicastsocket-example/ – Nikolai
Это код, в котором вы работаете? вы используете неблокирующий канал, вам будет очень, очень, очень повезло, если произойдет прибытие пакета в то время, когда вы вызываете 'channel.receive (buf);'. Вы пробовали это с блокирующим каналом? – nos
Благодарим вас за консультацию, обычно канал UDP, который я хочу слушать, - это супер наводнение. Поэтому я использовал неблокирующий режим .... но я также попробовал 'channel.configureBlock (true);' чтобы выяснить проблему, но, к сожалению, не работал, я бы предположил, что может быть что-то, что я должен проверить, как rp_filter в Linux-системе ... но не знаю, что это такое ... – BinaryProbe