我读过一个 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() 写入的数据是立即发送到客户端(甚至可能仍在发送),还是仅在已写入流的数据(由客户端)处理后发送。
下面的问题甚至可以澄清前面的问题:如果客户端通过写入流发送一些数据,该数据是否已移动到服务器端的消息队列中等待读取,因此该流实际上是“空的”?这将解释为什么服务器可以立即写入流 - 因为来自流的数据实际上是在其他地方缓冲的......?
最佳答案
TCP 连接原则上是全双工的。因此,您正在处理 2 个独立的 channel ,是的,双方可能同时进行写作。
关于c# - NetworkStream 如何在两个方向上工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1611582/