社区
Java SE
帖子详情
如何设置DatagramSocket.receive()超时,解除阻塞,并不抛出exception
wjj0317
2010-11-01 04:48:05
正常情况下DatagramSocket.receive()是阻塞到收到包为止,我想设置一个timeout时间,比如一秒,超过一秒就解除阻塞,继续执行下面的语句。
不要跟我说setSoTimeout(),会抛出异常的,要求是“继续执行下面的语句”。
...全文
4992
5
打赏
收藏
如何设置DatagramSocket.receive()超时,解除阻塞,并不抛出exception
正常情况下DatagramSocket.receive()是阻塞到收到包为止,我想设置一个timeout时间,比如一秒,超过一秒就解除阻塞,继续执行下面的语句。 不要跟我说setSoTimeout(),会抛出异常的,要求是“继续执行下面的语句”。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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文档.
Datagram
Socket
.re
ceive
()方法无响应的解决
之前看网上说用发送命令行的方式获取客户端的mac地址,具体方法不复述了。 其中用到这个re
ceive
()方法,朋友在测试的时候发现会无响应,发现是window的系统防火墙开启以后出现的。 无法保证每个用户都是关闭系统防火墙的,所以看了一下api,发现一个解决方法。 直接贴代码看吧 [java] view plaincopyprint?
android
Datagram
Socket
创建
阻塞
抛出
异常
真素气鼠,在一个demo里跑成功的代码,拷贝到另一个项目就不行了。原因是代码执行到创建
Datagram
Socket
对象时就
阻塞
了。搞了半天,改来改去,最后发现是权限忘记添加了。 在AndroidManifest.xml中添加: <uses-permission android:name="android.permission.INTERNET" /> <?xml ver...
Android UDP通信的成败判断
最近在 Android 开发的时候遇到一个问题,就是在服务器与客户端采用UDP协议通信的时候,如何判断一开始双方建立了连接。 “连接建立”很容易实现,服务器受到命令,返回类似ACK等信息,客户端使用
Datagram
Socket
.re
ceive
() 方法接收信息,即可知道双方已完成一次交互,通信成功。而要判断“连接失败”,即客户端在
Datagram
Socket
.re
ceive
() 这一步就会产
Socket
参数调优
java
socket
中有很多参数可以选择,这篇博客的目的是沉淀出这些参数的语义和用法,供自己以后查阅。 1、java
socket
参数选项总览 在JDK1.6中有如下参数选项: 1 public final static int TCP_NODELAY = 0x0001; 2 3 public final static int SO_BINDADDR = 0x0...
多任务处理:
阻塞
和
超时
阻塞
和
超时
Socket
的I/O调用可能会因为多种原因而
阻塞
。数据输入方法read()和re
ceive
()在没有数据可读时会
阻塞
。TCP套接字的write()方法在没有足够的空间缓存传输的数据时可能
阻塞
。 Server
Socket
的accept()方法和
Socket
的构造函数都会
阻塞
等待,直到连接建立。同时,长的信息往返时间,高错误率的连接和慢速的(或已发生故障的)服务器,都...
Java SE
62,614
社区成员
307,327
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章