Я прочитал пример 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 (), отправленными немедленно клиенту (который, возможно, все еще отправляет), или только после обработки данных, уже записанных в поток (клиентом).
Следующий вопрос может даже прояснить предыдущий: если клиент отправляет некоторые данные посредством записи в поток, перемещаются ли эти данные в очередь сообщений на стороне сервера, ожидая чтения, поэтому поток фактически «пуст»? Это объясняет, почему сервер может немедленно записывать в поток - потому что данные, поступающие из потока, фактически буферизуются в другом месте ...?