1

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

同じ接続で FTP サイトからファイルを取得する間、タイムアウトを設定していません。FTPClient.setSoTimeOut(timeout)メソッドmethod を呼び出して、同じ接続でのそのような対話ごとに個別のタイムアウトを設定することは必須ですか、またはSocket.connect(Adreess,timeout)メソッドは、1 つの接続での FTP サイトとの対話ごとにタイムアウトを設定しますか?

私も知りたいのですが、これら2つの方法の違いは何ですか?

4

1 に答える 1

2

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

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

システムの既定値に依存しないように、両方のタイムアウト値を設定することをお勧めします。ただし、呼び出しがネイティブ コードでスタックしている場合、タイムアウトが機能しないことがあります。たとえば、ファイアウォールがサイレントにパケットをドロップする場合、接続タイムアウトは受け入れられません。

于 2009-09-11T10:08:59.210 に答える