Tcp Echo Server の例を読んだことがありますが、不明な点がいくつかあります。
TcpClient client = null;
NetworkStream netStream = null;
try {
client = listener.AcceptTcpClient();
netStream = client.GetStream();
int totalBytesEchoed = 0;
while ((bytesRcvd = netStream.Read(rcvBuffer, 0, rcvBuffer.Length)) > 0) {
netStream.Write(rcvBuffer, 0, bytesRcvd);
totalBytesEchoed += bytesRcvd;
}
netStream.Close();
client.Close();
} catch {
netStream.Close();
}
サーバーがパケットを受信すると (while ループ)、データを rcvBuffer に読み取り、ストリームに書き込みます。
私を混乱させるのは、コミュニケーションにおけるメッセージの時系列順です。netStream.Write() で書き込まれたデータがクライアントにすぐに送信されるか (まだ送信中の場合もあります)、または (クライアントによって) 既にストリームに書き込まれたデータが処理された後にのみ送信されます。
次の質問は、以前のことを明確にするかもしれません: クライアントがストリームに書き込むことによってデータを送信する場合、そのデータはサーバー側のメッセージ キューに移動され、読み取られるのを待っているため、ストリームは実際には「空」になりますか? これは、サーバーがすぐにストリームに書き込むことができる理由を説明します-ストリームからのデータは実際には他の場所にバッファリングされているためです...?