Socket.connect(Adreess,timeout)和FTPClient.setSoTimeOu之间的区别

时间:2009-09-11 08:59:31

标签: java ftp apache-commons

我们正在通过我们的应用程序进行FTP连接,这是一个JAVA应用程序。 我们在调用Socket.connect(Adreess,timeout)方法之前使用FTPClient.connect()方法设置了连接超时。

在同一连接下从FTP站点检索文件期间,我们没有设置任何超时。是否必须调用方法FTPClient.setSoTimeOut(timeout)方法为同一连接下的每个此类交互设置单独的超时,或者Socket.connect(Adreess,timeout)方法将在一个连接下为FTP站点的每次交互设置超时?

我也想知道这两种方法有什么区别?

1 个答案:

答案 0 :(得分:2)

Socket.connect()中的超时是连接超时,这是等待TCP握手完成的时间。此超时仅在每个连接发生一次。

setSoTimeout()被称为套接字读取超时,即等待从套接字读取挂起字节的时间。这发生在整个TCP会话中读取的每个套接字上。

最好设置两个超时值,这样就不必依赖系统默认值,这可能会有所不同。但是,当调用卡在本机代码中时,超时有时可能无效。例如,如果防火墙静默丢弃数据包,则不遵守连接超时。