2

在 java 中使用多播套接字时接收方法有问题。有一些主机希望使用多播套接字进行群聊。在每个主机上启动两个线程(读取和写入),并且它们都使用加入组 IP 的多播套接字。问题是当receive方法执行时,它没有返回之前从其他主机在它的写线程上发送的数据报包。这是什么问题?这是读取线程的运行方法中的一些代码:

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);

如果需要更多信息,请告诉我。

4

1 回答 1

1

正如我在评论中提到的,如果不查看所有代码,很难确定发生了什么,但似乎至少在“读取”场景中,您没有将多播套接字加入多播组。

有关更多信息,请参阅MulticastSocket 的文档。在 JavaDoc 的顶部有一个很好的、简单的书写和阅读示例。

于 2012-11-28T22:35:46.500 回答