0

ソケットを作成して接続を確立したら、BufferedReader と PrintWriter を使用してソケットから書き込み/読み取りを行います。

Socket s = new Socket(ip, port);
BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
PrintWriter out = new PrintWriter(s.getOutputStream());

ソケットの使用が完了したら、ソケットを閉じます。

s.close();

これにより、TCP fin が送信され、TCP 接続が半分開いたままになります。クライアント/サーバーが接続の終わりを閉じたかどうかを検出する方法はありますか?

4

1 に答える 1

1

これにより、TCP fin が送信され、TCP 接続が半分開いたままになります。

そうではありません。これ以上データを受信すると、リセットを発行するハーフオープン TCP 接続が残ります。

クライアント/サーバーが接続の終わりを閉じたかどうかを検出する方法はありますか?

すでに閉じている場合はそうではありません。書き込みシャットダウンを発行したばかりの場合は、EOS まで読み取ることができます。これにより、ピアが閉じられたことがわかります。その後、ソケットを閉じます。本当に同時決済を達成する必要がない限り、あまり意味がありません。

于 2013-04-13T12:14:23.177 に答える