好像我的接收方法在java中的多播套接字上没有得到数据包

时间:2012-11-27 23:49:37

标签: java multithreading multicastsocket

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

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

1 个答案:

答案 0 :(得分:1)

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

有关详细信息,请参阅documentation for MulticastSocket。在JavaDoc的顶部有一个很好的,简单的写入和读取示例。