场景:
我正在构建一个使用 Commons Net FTPSClient 连接到服务器的应用程序。
如果连接断开,我想重新启动它。我尝试使用 ftp.disconnect();
来完成此任务
disconnect()
来电 socket.close()
只需拉动电源线即可模拟连接中断。
问题:
socket.close()
关闭大约需要 9 分钟(540 秒)。
这是为什么呢?我该如何更改它?
socket.getSoLinger()
返回 -1(禁用)和 socket.getSoTimeout()
返回 30000(30 秒)
最佳答案
我认为这是控制 channel 保持 Activity 功能的问题:
文件传输期间,数据连接繁忙,但控制连接空闲。 FTP 服务器知道控制连接正在使用中,因此不会因缺乏 Activity 而关闭它,但网络路由器很难知道控制连接和数据连接彼此关联。
ftpClient.setControlKeepAliveTimeout(300); // set timeout to 5 minutes
并检查它
int iReply = ftpClient.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply))
{
ftpClient.disconnect();
System.err.println("FTP server refused connection.");
System.exit(1);
}
关于java - 套接字关闭前的长时间延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9836905/