4

サーバーにリスニング ポートがあり、Java クラスとSocketインターフェイスを使用して接続しています。

Socket mySocket = new Socket(host,port);

次に をつかみ、 autoflush モードで をOutputStreamデコレートPrintWriterすると、私は笑います (リスニング ポートが閉じている場合を除く)。それから私は得る

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

プログラムの問題を検出できないようです-ソケットでメソッドを使用しようとしましたisConnected()が、接続が閉じられていることを認識していないようです。

次回ソケットに書き込もうとするときに問題を認識して、再接続して問題を報告できるようにしたいと思います。

アドバイスをお願いします。

皆さんありがとう

4

3 に答える 3

1

Set a short timeout?

Does isOutputShutdown() not get you what you want?

You could always build a SocketWatcher class that spins up in its own Thread and repeatedly tries to write empty strings to the Socket until that raises a SocketClosedException.

于 2008-08-22T16:33:13.820 に答える
0

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

于 2014-02-22T22:47:06.493 に答える
-2

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

于 2008-09-29T01:12:52.340 に答える