问题描述
正常情况下DatagramSocket.receive()是阻塞到收到包为止,我想设置一个timeout时间,比如一秒,超过一秒就解除阻塞,继续执行下面的语句。不要跟我说setSoTimeout(),会抛出异常的,要求是“继续执行下面的语句”。
解决方案
解决方案二:
setSoTimeoutpublicvoidsetSoTimeout(inttimeout)throwsSocketException启用/禁用带有指定超时值的SO_TIMEOUT,以毫秒为单位。将此选项设为非零的超时值时,对此DatagramSocket调用receive()将只阻塞此时间长度。如果超过超时值,将引发java.net.SocketTimeoutException,虽然DatagramSocket仍旧有效。选项必须在进入阻塞操作前被启用才能生效。超时值必须是>0的数。超时值为0被解释为无穷大超时值。参数:timeout-指定的以毫秒为单位的超时值。抛出:SocketException-如果底层协议出现错误,例如UDP错误。从以下版本开始:JDK1.1另请参见:getSoTimeout()摘自JDKAPI文档.
解决方案三:
使用nio,NioDatagramSocket()非阻塞UDPsocket。或者使用timer计时器,里面可以设置超时时间。
解决方案四:
该回复于2011-03-08 13:34:26被版主删除
解决方案五:
防止异常。加个trycatch就行了,为什么这么担心。
解决方案六:
该回复于2011-03-08 16:19:42被版主删除
时间: 2024-12-03 05:50:27