1
我有一個組播套接字,必須指定一個網絡接口才能接收數據。但是,當我使用網絡接口加入組時,Java將不會收到它。我有一個簡單的Python程序,可以在同一臺服務器上完成同樣的事情,並且工作正常。未在特定網絡接口上接收的Java組播套接字
我在爲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程序,它可以完成相同的任務,並且每次都能很好地工作。
僅供參考蟒蛇看起來像開關這一個MulticastChannel
MCAST_GRP = 'x.x.x.x'
MCAST_PORT = 40000
mcastsock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
mcastsock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
mcastsock.setsockopt(socket.SOL_IP,socket.IP_ADD_MEMBERSHIP,
socket.inet_aton(MCAST_GRP)+socket.inet_aton('z.z.z.z'))
mcastsock.bind((MCAST_GRP,MCAST_PORT))
while True:
print mcastsock.recv(1320)
在上面的Python腳本,而不是「z.z.z.z」什麼,我需要提供哪些資料? – kit