0

我正在尝试使用 apache FtpCiient 下载一个大文件,并且我每 2 小时不断超时。所以,我设置了 FTPClient.setDataTimeout(readTimeoutInMs); 到 3 小时

它适用于windows,但不适用于linux。

我在 JavaDocs SocketClient.setKeepAlive() 中看到了这一点 -

在当前打开的套接字上设置 SO_KEEPALIVE 标志。从 Javadocs 来看,默认的 keepalive 时间是 2 小时(尽管这取决于实现)。看起来 Windows WSA 套接字实现似乎允许设置特定的 keepalive 值,尽管在其他系统上似乎并非如此。

那么,我的 readTimeout=3hours 在 linux 上不起作用是真的吗?我能做些什么?

谢谢,

4

1 回答 1

1

你混淆了几件事。Keepalive 和读取超时不是一回事。

  • Keepalive 是一种检测死连接的 TCP 协议技巧,例如用于 Telnet 服务器。默认关闭,开启时默认测试间隔为两小时。对于一个活跃的 FTP 连接,我怀疑打开它会有什么不同。

  • 如果在超时期限内未收到任何数据,则读取超时会导致读取操作超时。它适用于每个单独的阅读。

  • 您提到的 FTP 数据超时可能又是别的东西,例如总传输超时。您必须查看它的文档才能确定。

于 2012-07-27T01:02:58.447 回答