我在java中使用多播套接字时遇到了接收方法的问题。有些主机他们希望使用多播套接字进行群组聊天。每个主机上都启动了两个线程(读取和写入),并且它们都使用连接到组IP的多播套接字。 问题是,当receive方法执行时,它不会返回之前从其写入线程上的其他主机发送的数据报包。问题是什么? 这里是read thread的run方法中的一些代码:
byte buff[]=new byte[576];
DatagramPacket DataPkt=new DatagramPacket(buff, 576);
MultiReadSocket.receive(DataPkt);
System.out.println("Datagram Packet: " + DataPkt);
ByteArrayInputStream bais = new ByteArrayInputStream(buff);
ObjectInputStream ois = new ObjectInputStream(bais);
MyPkt = (MyPacket)ois.readObject();
写入线程的run方法中的代码:
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(MyPkt);
DatagramPacket DataPkt = new DatagramPacket(baos.toByteArray(), baos.toByteArray().length,InetAddress.getByName("235.0.0.2"), 2020);
MultiWriteSocket.send(DataPkt);
如果需要更多信息,请告诉我。
答案 0 :(得分:1)
正如我在评论中提到的,很难确定在没有看到所有代码的情况下发生了什么,但似乎至少在“读取”场景中,您没有将多播套接字加入多播组。
有关详细信息,请参阅documentation for MulticastSocket。在JavaDoc的顶部有一个很好的,简单的写入和读取示例。