Java MulitcastSocket接收方法"阻止程序"?

时间:2011-12-08 20:44:03

标签: java multicast multicastsocket

我正在用Java编写一个类来简化从多播组连接,加入,发送和接收数据的过程。此时,我在Java的receive()类中遇到MulticastSocket方法时遇到问题。每当我使用这种方法时,整个程序都会停止,直到收到数据为止。

我想知道是否有一种方法可以让它只听一段给定的持续时间,比如说5秒钟?

这是我正在做的 very 基本代码示例。请注意,它完全不像我的实际代码,有例外捕获,导入语句等...它只是显示了我的类的基本流程如何利用Java的多播能力:

//Connect to the multicast host, and join the group
  MulticastSocket msConn = new MulticastSocket(5540);
  InetAddress netAddr = InetAddress.getByName("239.255.255.255");
  msConn.joinGroup(netAddr);

//Preapre a datagram packet in which to place recieved data
  byte buf[] = new byte[1024];
  DatagramPacket pack = new DatagramPacket(buf, buf.length);

//PROBLEM: Code halts here until data is recieved
//Accoding the the Java Docs it says that
//"This method blocks until a datagram is received."
  msConn.recieve(pack);

感谢您的时间。

1 个答案:

答案 0 :(得分:3)

使用setSoTimeout()方法设置接收数据报的超时时间。然后,根据recieve()的文档,如果超时已经过去,它将抛出SocketTimeoutException,允许您继续执行程序。