2008-08-22 8 views
3

私はすなわち切断時にJava Socketをフェイル・ファーストに構成しますか?

Socket mySocket = new Socket(host,port); 

私は、その後、OutputStreamをつかむ自動フラッシュモードでPrintWriterで飾ると私は、私は、JavaクラスとSocketインタフェースを使用して接続しています私のサーバー上のリスニングポートを持っています笑い - リスニングポートが閉じた場合を除いて。それから私は

tcp4  0  0 *.9999     *.*     LISTEN 
tcp  0  0 127.0.0.1.45737  127.0.0.1.9999   CLOSE_WAIT 

を取得し、私はプログラムで問題を検出するのに見えることはできません - 私は、ソケット上isConnected()方法を使用して試してみたが、接続が閉じていることを知っていないようです。

次回私がソケットを試して再接続して問題を報告できるようにするために、この問題を認識したいと思います。

お願いします。

ありがとうございました

+0

isConnected()メソッドは、このSocketを接続したかどうかを示します。接続の状態については教えていません。 – EJP

答えて

0

タイムアウトを短く設定しますか?

isOutputShutdown()あなたがしたいことはありませんか?

あなたは、常に独自のThreadにスピンアップを繰り返しているがSocketClosedExceptionを上げるまでSocketに空の文字列を書き込もうとSocketWatcherクラスを構築することができます。

+0

いいえ、isOutputShutdown()は彼に彼が望んでいるものを与えず、短時間のタイムアウトも、存在しないSocketClosedExceptionを取得しようとする試みもしません。あなたは接続の状態とソケットの状態を混同しています。 -1 – EJP

-2

ソケットから読み取るスレッドに別のスレッドを設定します。ソケットが閉じられるまでブロックされ、例外がスローされます。その例外をキャッチしてすぐにクローズを検出します。

+0

読み取りによって検出できない方法でTCP接続が失敗する可能性があります。 – EJP

0

TCPで壊れている接続を検出する唯一の信頼できる方法は、それに書き込むことです。これによって、結局は接続リセットIOExceptionが発生します。ただし、バッファリングのため、切断後の最初の書き込みでは発生しませんが、その後の書き込みでは発生しません。あなたはこれについて何もすることはできません。

関連する問題