我读过一个 Tcp Echo 服务器的例子,有些事情我不清楚。
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() 写入的数据是立即发送到客户端(甚至可能仍在发送),还是仅在已经写入流(由客户端)处理的数据之后发送。
下面的问题甚至可以澄清前面的问题:如果客户端通过写入流来发送一些数据,这些数据是否移动到服务器端的消息队列中等待读取,因此流实际上是“空的”?这可以解释为什么服务器可以立即写入流 - 因为来自流的数据实际上在其他地方缓冲......?