Java MulticastSocket.receive即使发送数据包也不会返回
我正在尝试编写一个服务代码,该服务每10秒向多播组发送一条消息。发送者是以下人员:Java MulticastSocket.receive即使发送数据包也不会返回,java,multicast,multicastsocket,Java,Multicast,Multicastsocket,我正在尝试编写一个服务代码,该服务每10秒向多播组发送一条消息。发送者是以下人员: public void send(){ int port = (Integer) config.getValue("MULTICAST_PORT"); MulticastSocket users = new MulticastSocket(port); users.setTimeToLive((Integer) config.getValue("MULTICAST_TTL"));
public void send(){
int port = (Integer) config.getValue("MULTICAST_PORT");
MulticastSocket users = new MulticastSocket(port);
users.setTimeToLive((Integer) config.getValue("MULTICAST_TTL"));
users.setLoopbackMode(false);
InetAddress multicastGroup = InetAddress.getByName((String) config.getValue("MULTICAST_IP"));
String x = "0";
DatagramPacket pkt = new DatagramPacket(x.getBytes(), x.getBytes().length, multicastGroup, port);
while(true) {
System.out.println("Send Pkt");
users.send(pkt);
Thread.sleep(10000);
}
}
接收者必须读取数据包并回复
MulticastSocket multiServer = new MulticastSocket((Integer) config.getValue("MULTICAST_PORT"));
InetAddress multicastGroup = InetAddress.getByName((String) config.getValue("MULTICAST_IP"));
multiServer.joinGroup(multicastGroup);
while(true){
System.out.println("WAIT KeepAlive Packet");
server.receive(pkt);
DataInputStream in = new DataInputStream(new ByteArrayInputStream(
pkt.getData(), pkt.getOffset(), pkt.getLength()
));
if(in.readInt() == 0){ //0 means "OK"
ObjectSocket skt = new ObjectSocket(InetAddress.getByName(
(String) config.getValue("SERVER_HOSTNAME")),
Integer.parseInt((String) config.getValue("SERVER_PORT")));
try{
skt.writeObject(new PacketMessage(new SimpleMessage((String) config.getValue("USER"), (String) config.getValue("OAUTH")), PacketMessage.MessageType.KEEPALIVE));
} catch (UnregisteredConfigNameException e){
return;
}
}
对于发送方,输出为:
发送Pkt[10秒睡眠]
发送Pkt
(多次…) 对于接收者: 等待保留数据包 这两个函数都在同一台机器上运行,使用两个不同的进程。多播IP相同(已验证)。我不明白为什么
receive()
不返回
多播端口值在所执行函数的引用中不同,但这应该不是问题。不会引发异常。不需要使用
多播套接字
发送到多播组,也不需要将发送套接字绑定到同一端口。不需要使用多播套接字
发送到多播组,也不需要将发送套接字绑定到同一端口。