1

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

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

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

4

1 回答 1

2

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

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

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

于 2009-09-11T10:08:59.210 回答