java socket通信如何设置连接时长

javasocket通信如何设置连接时长我用这个不行,原因是服务端与客户端网速太慢了,我想只要一连接60秒后自动断开连接如何办到,就算它一直在传数据也给它断掉,如何办到?... java socket通信如何设置连接时长
我用这个不行,原因是服务端与客户端网速太慢了,我想只要一连接60秒后自动断开连接如何办到,就算它一直在传数据也给它断掉,如何办到?
socket.setSoTimeout(60000);//设置超时时间,单位为毫秒
展开
 我来答
sust_net
2015-09-01 · TA获得超过562个赞
知道小有建树答主
回答量:254
采纳率:0%
帮助的人:163万
展开全部

  使用jdk中的setSoTimeout(int timeout) 方法,以毫秒为单位。

  参考代码:

SocketAddress address = new InetSocketAddress("192.168.0.104", 8888);
ServerSocket s = new ServerSocket();  
s.bind(address); 
Socket socket = s.accept();
socket.setSoTimeout(5 * 1000); //5秒钟

  将此选项设为非零的超时值时,在与此 Socket 关联的 InputStream 上调用 read() 将只阻塞此时间长度。

  如果超过超时值,将引发 java.net.SocketTimeoutException,虽然 Socket 仍旧有效。选项必须在进入阻塞操作前被启用才能生效。

  另外:超时值必须是 > 0 的数。超时值为 0 被解释为无穷大超时值。

puziguo
2013-05-04 · TA获得超过1928个赞
知道小有建树答主
回答量:884
采纳率:86%
帮助的人:806万
展开全部
setSoLinger
public voidsetSoLinger(boolean on,
int linger)
throwsSocketException
启用/禁用具有指定逗留时间(以秒为单位)的 SO_LINGER。最大超时值是特定于平台的。 该设置仅影响套接字关闭。
参数:
on- 是否逗留。
linger- 逗留时间,如果 on 为 true。

这个方法满足你要求不?
追问
不行哦,好像这个是设置在close的时候的时长,有没有就是没在close的时候,就是连接的时间再在一分钟内,无论有没有连接只要超过1分钟就断开。
追答
定时器不知道你会不会

不过还有个方法
开启一个线程监控时间
具体如下
socket连接上了,记录当前时间,开启线程,不断比较当前时间,如果时间到了,强行关闭socket
伪代码:
------------------------

socket操作类{
socket链接
记录时间
开启监控线程
socket的其他操作

}
---------------------

时间监控线程{
构造方法(Socket,起始时间)
run{
while(true){
if(当前时间-起始时间>=间隔时间){
socket.close();
break;//线程结束

}else{
sleep(500); 休眠0.5秒

}

}

}

}

这样如果你想60秒关闭,可能在70秒的时候才关闭,有延迟的
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
木下临风
2015-08-12 · TA获得超过296个赞
知道答主
回答量:130
采纳率:100%
帮助的人:48.4万
展开全部
socket.setSoTimeout(60000);//设置超时时间,单位为毫秒
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
我是周星星2
2013-05-05 · TA获得超过313个赞
知道小有建树答主
回答量:221
采纳率:0%
帮助的人:127万
展开全部
大哥那些API函数有时候是不管用的,你直接用线程的方法解决不好么? Thead.sleep(60000)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式