1


0

我々はJAVAアプリケーションである我々のアプリケーションを通してFTP接続をしている。 `FTPClient.connect()`メソッドを呼び出す前に `Socket.connect(Adreess、timeout)`メソッドを使って接続のタイムアウトを設定しました。

同じ接続でFTPサイトからファイルを再取得している間、タイムアウトを設定していません。 メソッド `FTPClient.setSoTimeOut(timeout)`を同じ接続の下でのそれぞれのそのような相互作用のための個々のタイムアウトを設定するために呼び出すことは必須ですか `Socket.connect(Adreess、timeout)`メソッド接続?

これら2つの方法の違いは何ですか。

1 回答


2


`Socket.connect()`のタイムアウトは接続タイムアウトで、これはTCPハンドシェイクが終了するのを待つ時間です。 このタイムアウトは、接続ごとに1回だけ発生します。

`setSoTimeout()`はソケット読み込みタイムアウトと呼ばれ、ソケットから保留中のバイトを読み込むのを待つ時間です。 これは、TCPセッション全体を通して読み取られるすべてのソケットで発生します。

システムのデフォルト値に頼らないように、両方のタイムアウト値を設定することをお勧めします。 ただし、呼び出しがネイティブコードで止まっていると、タイムアウトが機能しないことがあります。 たとえば、ファイアウォールが黙ってパケットをドロップした場合、接続タイムアウトは考慮されません。