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

发布网友 发布时间:2022-04-22 01:14

我来回答

4个回答

热心网友 时间:2023-12-26 15:41

  使用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 被解释为无穷大超时值。

热心网友 时间: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)

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com