发布网友 发布时间:2022-04-22 01:14
共4个回答
热心网友 时间:2023-12-26 15:41
使用jdk中的setSoTimeout(int timeout) 方法,以毫秒为单位。
参考代码:
SocketAddress address = new InetSocketAddress("192.168.0.104", 8888);将此选项设为非零的超时值时,在与此 Socket 关联的 InputStream 上调用 read() 将只阻塞此时间长度。
如果超过超时值,将引发 java.net.SocketTimeoutException,虽然 Socket 仍旧有效。选项必须在进入阻塞操作前被启用才能生效。
另外:超时值必须是 > 0 的数。超时值为 0 被解释为无穷大超时值。
热心网友 时间:2023-12-26 15:41
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秒的时候才关闭,有延迟的
热心网友 时间:2023-12-26 15:42
socket.setSoTimeout(60000);//设置超时时间,单位为毫秒
热心网友 时间:2023-12-26 15:42
大哥那些API函数有时候是不管用的,你直接用线程的方法解决不好么? Thead.sleep(60000)