2016-10-14 12 views
1

たとえば、サーバーが誤ってシャットダウンしたときなど、TCP接続が失われた(クローズされていない)ことを知りたい。だから、私はoutputStream.write(s)でデータを送信します。接続が失われ、I m trying send data it should throws SocketException`が発生しました。しかし、それは2回目の送信データの後にのみスローされます。なぜこうなった。TCP接続が失われたときの検出

+0

TCP出力がバッファされるため。 – EJP

+0

'write'の後に' outputStream.flush() 'を追加しようとします。 –

+0

@ mr.iceteaこれはまったく何も行いません。 Javaソケット出力ストリームはバッファされないので、 'flush()'は効果がありません。 – EJP

答えて

0

TCPの切断またはプルを検出する最良の方法は、IoExceptionが発生するのを待って適切な処置をとることです。 TCPがあなたのために容易にできるのは、もう一方がFINを送信して最終的に-1を返し、接続がEOFExceptionで閉じられていることをユーザーに知らせる場合です。

編集:訂正していただきありがとうございます。私はもう少し明確であることを忘れました。

+0

ピアは「送信-1」しません。それはあなたが呼んでいるものに応じて、ローカルAPIが-1またはnullまたは 'EOFException'として返すFINを送ります。 – EJP

関連する問題