posts - 4, comments - 10, trackbacks - 0, articles - 2
我现在做一个socket客户端的接口,有这么一个问题。
1,如果在30秒内接收到服务器端返回的消息,就认为是一次成功的连接。否则断开此次连接
2,采用短连接方式。即每次往服务器端发消息都建立一次连接
3,每个发送请求最多允许3次连接。
问题:怎样判断30秒内没有接收到消息和收到消息时没有超出30秒就断开连接呢?
        请给小弟一个思路吧。

Feedback

# re: 一个关于时间间隔的问题,请大侠们帮一下忙了。急!!!  回复  更多评论   

2007-01-04 22:16 by jrobot[匿名]
连接时可以设置接连超时,socket.connect(SocketAddress endpoint, int timeout) ;
如果是读取内容,也可以设置超时socket.setSoTimeout(int timeout);要在读取内容前设置,jre 1.4以上都支持

我想这样可以解决你的问题吧,捕获相应的异常做相应的处理就可以了,具体可以参考jdk的文档

# re: 一个关于时间间隔的问题,请大侠们帮一下忙了。急!!!  回复  更多评论   

2007-01-05 16:00 by samfree
多谢楼上给的提示,我按照你说的设置了socket.setSoTimeout(30000);得到了我的目的。看来我有必要多研究一下socket函数了哈哈

# re: 一个关于时间间隔的问题,请大侠们帮一下忙了。急!!!  回复  更多评论   

2011-11-25 11:43 by liangO
java.net
类 Socket
java.lang.Object
java.net.Socket
直接已知子类:
SSLSocket


setSoTimeout
public void setSoTimeout(int timeout)
throws SocketException启用/禁用带有指定超时值的 SO_TIMEOUT,以毫秒为单位。将此选项设为非零的超时值时,在与此 Socket 关联的 InputStream 上调用 read() 将只阻塞此时间长度。如果超过超时值,将引发 java.net.SocketTimeoutException,虽然 Socket 仍旧有效。选项必须在进入阻塞操作前被启用才能生效。超时值必须是 > 0 的数。超时值为 0 被解释为无穷大超时值。

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

只有注册用户登录后才能发表评论。


网站导航: