Java 插座关闭前的长延时 脚本:
我正在构建一个应用程序,它使用Commons Net FTPSClient连接到服务器 如果连接断开,我想重新启动它。我试图通过使用Java 插座关闭前的长延时 脚本:,java,sockets,Java,Sockets,我正在构建一个应用程序,它使用Commons Net FTPSClient连接到服务器 如果连接断开,我想重新启动它。我试图通过使用ftp.disconnect()来实现这一点 disconnect()调用socket.close() 只需拉动电源线即可模拟连接中断 问题: socket.close()关闭大约需要9分钟(540秒) 这是为什么?我怎样才能改变它? socket.getSoLinger()返回-1(禁用)和socket.getSoTimeout()返回30000(30秒)我认为这
ftp.disconnect()来实现这一点代码>
disconnect()
调用socket.close()
只需拉动电源线即可模拟连接中断
问题:
socket.close()
关闭大约需要9分钟(540秒)
这是为什么?我怎样才能改变它?
socket.getSoLinger()
返回-1(禁用)和socket.getSoTimeout()
返回30000(30秒)我认为这是控制通道保持活动功能的问题:
在文件传输期间,数据连接繁忙,但控制连接空闲。FTP服务器知道控制连接正在使用中,因此不会因为缺少活动而关闭它,但网络路由器很难知道控制连接和数据连接是相互关联的
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);
}
为了帮助查明问题,您可以在调用socket.close()后运行netstat来确定客户端处于什么状态(FIN\u WAIT、TIME\u WAIT等)。这应该会让你知道延迟在哪里。遗憾的是,这似乎没有任何区别