>一方、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()するわけには
いかないからです。
これで回答になっておりますでしょうか?