2016-07-28 14 views
0

私は、クライアントがサーバにメッセージを送信してから、サーバが応答するのを5秒間待つ(仮定する)アプリケーションを作成しています。返信メッセージがなければ、もう一度やり直します。サーバがメッセージで応答すると、クライアントはそれを処理します。これはループで続き、いつか後に再び起こります。JAVA:ソケットsetSoTimeoutを使用するのはいつですか?

クライアントソケットでsetSoTimeout(時間)を使用することを考えていましたが、javadocとインターネット上で多くの説明を読んだ後、このアプローチが正しいかどうか混乱しています。

私は、インターネット上で読む何

私はソケットにsetSoTimeoutを使用する場合、それは、接続が確立する必要のある期間のタイムアウトを与え、それはそれを確立されていない場合は(1)

指定された時刻に接続を確立しようとします。

(2)ソケットでsetSoTimeoutを使用すると、指定された時間間隔で受信メッセージを待機し、メッセージが受信されない場合は待機しません。

私の質問がある -

(1)上記のどちらが本当ですか?

(2)2番目のステートメントが真であれば、実装に使用できますか?

(3)2番目のステートメントが真の場合、タイムアウトタイマーはいつ正確に開始されますか?ソケットを宣言してタイムアウト時間を設定するのはいつですか?それともメッセージを送信するのですか?

いずれかの説明が私のケースに当てはまらない場合は、クライアント側で一定の時間間隔をおいて返信する必要がありますか?返事が来たら、私はそれを処理し、同じプロセスをやり直すべきです。返事が来なければ、私は先に進み、プロセス全体をやり直すべきです。

答えて

-1

(1)私はソケットにsetSoTimeout()を使用する場合、それは、接続が確立される必要があり、それがその後、確立されていない場合、それは与えられた時間のための接続を確立するために再試行する期間のタイムアウトを提供します。

これは間違っています。 setSoTimeout()は、「指定された時間」だけでなく、接続の再確立をまったく引き起こさない。

(2)私は、ソケット上setSoTimeout()を使用する場合は、指定された時間間隔の間、着信メッセージを待機しないメッセージが受信されない場合、それは待って停止します。

これはもう少し正確ですが、TCPにメッセージなどはありません。

正しい説明は、少なくとも1バイトが到着するまでに指定されたタイムアウトまでブロックするということです。タイムアウト内に何も到着しなければ、SocketTimeoutExceptionがスローされます。

(1)上記のうちどれですか?

どちらもありません。

(2)2番目のステートメントがtrueの場合、実装に使用できますか?

2番目の部分は適用されませんが、いずれかのステートメントがtrueの場合は、実装の一部として使用できます。あなたは尋ねる必要はありません。

(3)2番目のステートメントが真の場合、タイムアウトタイマーはいつ正確に開始されますか?

read()に電話をしたとき。

ソケットを宣言してタイムアウト時間を設定するのはいつですか、それともメッセージを送信するのですか?

どちらもありません。

いずれかの説明が私のケースに当てはまらない場合は、クライアント側で一定の時間間隔をおいて返信するのを待つ必要がありますか?

読み取りタイムアウトを設定します。

関連する問題