如何设置DatagramSocket.receive()超时,解除阻塞,并不抛出exception

wjj0317 2010-11-01 04:48:05
正常情况下DatagramSocket.receive()是阻塞到收到包为止,我想设置一个timeout时间,比如一秒,超过一秒就解除阻塞,继续执行下面的语句。
不要跟我说setSoTimeout(),会抛出异常的,要求是“继续执行下面的语句”。
...全文
4992 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Coolfatman 2011-03-08
  • 打赏
  • 举报
回复
防止异常。加个try catch 就行了,为什么这么担心。
tanrenzong1986 2011-03-03
  • 打赏
  • 举报
回复
使用nio,NioDatagramSocket()非阻塞UDP socket。或者使用timer计时器,里面可以设置超时时间。
youshusoft 2011-03-03
  • 打赏
  • 举报
回复
setSoTimeout
public void setSoTimeout(int timeout)
throws SocketException启用/禁用带有指定超时值的 SO_TIMEOUT,以毫秒为单位。将此选项设为非零的超时值时,对此 DatagramSocket 调用 receive() 将只阻塞此时间长度。如果超过超时值,将引发 java.net.SocketTimeoutException,虽然 DatagramSocket 仍旧有效。选项必须在进入阻塞操作前被启用才能生效。超时值必须是 > 0 的数。超时值为 0 被解释为无穷大超时值。

参数:
timeout - 指定的以毫秒为单位的超时值。
抛出:
SocketException - 如果底层协议出现错误,例如 UDP 错误。
从以下版本开始:
JDK1.1
另请参见:
getSoTimeout()

摘自JDK API文档.

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧