0

apache FtpCiient を使用して大きなファイルをダウンロードしようとしていますが、2 時間ごとに継続的にタイムアウトします。だから、私は FTPClient.setDataTimeout(readTimeoutInMs); を設定しました。~3時間

Windows では動作しますが、Linux では動作しません。

これは JavaDocs SocketClient.setKeepAlive() で見ました -

現在開いているソケットに SO_KEEPALIVE フラグを設定します。Javadoc によると、デフォルトのキープアライブ時間は 2 時間です (ただし、これは実装に依存します)。Windows WSA ソケットの実装では、特定のキープアライブ値を設定できるように見えますが、他のシステムではそうではないようです。

では、readTimeout=3hours が Linux で機能しないというのは本当ですか? 私に何ができる?

ありがとう、

4

1 に答える 1

1

あなたはいくつかのことを混乱させています。キープアライブと読み取りタイムアウトは同じではありません。

  • キープアライブは、たとえば Telnet サーバーなどのデッド接続を検出するための TCP プロトコル トリックです。デフォルトではオフで、オンの場合、デフォルトのテスト間隔は 2 時間です。アクティブな FTP 接続の場合、それをオンにしても違いが生じるとは思えません。

  • 読み取りタイムアウトにより、タイムアウト期間内にデータを受信しなかった場合、読み取り操作がタイムアウトになります。個々の読み取りに適用されます。

  • あなたが参照している FTP データのタイムアウトは、転送全体のタイムアウトなど、別のものである可能性があります。確認するには、そのドキュメントを確認する必要があります。

于 2012-07-27T01:02:58.447 に答える