java socket通信如何设置连接时长
javasocket通信如何设置连接时长我用这个不行,原因是服务端与客户端网速太慢了,我想只要一连接60秒后自动断开连接如何办到,就算它一直在传数据也给它断掉,如何办到?...
java socket通信如何设置连接时长
我用这个不行,原因是服务端与客户端网速太慢了,我想只要一连接60秒后自动断开连接如何办到,就算它一直在传数据也给它断掉,如何办到?
socket.setSoTimeout(60000);//设置超时时间,单位为毫秒 展开
我用这个不行,原因是服务端与客户端网速太慢了,我想只要一连接60秒后自动断开连接如何办到,就算它一直在传数据也给它断掉,如何办到?
socket.setSoTimeout(60000);//设置超时时间,单位为毫秒 展开
4个回答
展开全部
使用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 被解释为无穷大超时值。
展开全部
setSoLinger
public voidsetSoLinger(boolean on,
int linger)
throwsSocketException
启用/禁用具有指定逗留时间(以秒为单位)的 SO_LINGER。最大超时值是特定于平台的。 该设置仅影响套接字关闭。
参数:
on- 是否逗留。
linger- 逗留时间,如果 on 为 true。
这个方法满足你要求不?
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秒的时候才关闭,有延迟的
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
socket.setSoTimeout(60000);//设置超时时间,单位为毫秒
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
大哥那些API函数有时候是不管用的,你直接用线程的方法解决不好么? Thead.sleep(60000)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询