K.Maebashi's BBS

ご自由に書き込んでください。雑談も可。
テスト書き込みの類はテスト用掲示板にどうぞ

[日付順表示] [日付順インデックス] [スレッド順インデックス]


新規投稿 | 開設者ホームページへ戻る | ヘルプ


[2001] Re:P.17:終了のマークとして0を送付について
返信


投稿者:(ぱ)こと管理人
2017/08/23 19:06:08

Link:
>一方、TcpServerがserver_send.txtを送る際は、終了のマークとして0を送っていませんし、さらに‐1も送っていませんが、TcpClient側は‐1の受信で受信の終了を認識しています。

TcpClient.javaは、InputStremのread()メソッドで入力を1バイトずつ
読み込んでいますが、read()メソッドは、正常に1バイト読み込んだ時、
0〜255の値を返します。つまり、TcpClientが-1を受信するということは
あり得ません。-1が返るのは、「ストリームの終わりに達した場合」です。

https://docs.oracle.com/javase/jp/6/api/java/io/InputStream.html#read()

なぜクライアントから見てストリームが終わるのかといえば、それは
サーバ側でソケットをclose()したからです。

TcpClient.javaにて、終了のマーク0を送信しているのは、このソケットは
まだサーバからデータを返すのに使うので、このタイミングでclose()するわけには
いかないからです。

これで回答になっておりますでしょうか?
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[ より新しい投稿] [ より古い投稿]