我有一个多播套接字,我必须在其中指定网络接口才能接收数据。但是,当我使用网络接口加入组时,Java不会接收到它。我有一个简单的python程序,它在同一个服务器上执行完全相同的操作,并且运行良好。在
在为Java中的MulticastSocket设置NetworkInterface时,我缺少什么?在
java是:SocketAddress socketAddress = new InetSocketAddress("x.x.x.x", 40000);
NetworkInterface networkInterface = NetworkInterface.getByInetAddress(InetAddress.getByName("z.z.z.z"));
logger.info("Network interface is {} ", networkInterface);
MulticastSocket s = new MulticastSocket();
s.setInterface(InetAddress.getByName("z.z.z.z"));
s.joinGroup(socketAddress,networkInterface);
logger.info(s.getNetworkInterface());
while(true){
try{
logger.info("Waiting for message");
byte[] size = new byte[2];
DatagramPacket recv = new DatagramPacket(size, size.length);
socket.receive(recv);
logger.info("Received size message"); //Never get here
ByteBuffer wrapped = ByteBuffer.wrap(size); // big-endian by default
short messageSize = wrapped.getShort();
byte[] buf = new byte[messageSize-2];
DatagramPacket message = new DatagramPacket(buf, buf.length);
socket.receive(message);
logger.info("Received multicast message");
dataQueue.put(buf);
}catch(Exception e){
logger.error("Failed to receive multicast message ",e);
}
}
结果就是我从来没有收到过任何包。我有一个简单的python程序,可以做同样的事情,而且每次都能完美地工作。在
作为参考,python看起来像
^{pr2}$