Я написал TCP-сервер, в котором количество прочитанных байтов префикс в двухбайтовом заголовке. После чтения из потока и отправки ответа обратно клиенту удаляются как NetworkStream, так и TcpClient. Проблема в том, что клиент, похоже, не получил моего ответа, если я не раскомментирую строку Thread.Sleep(). Вот код:NetworkStream Sleep() issue
using (var tcpClient = await tcpServer.AcceptTcpClientAsync())
{
tcpClient.NoDelay = true;
using (var stream = tcpClient.GetStream())
{
var twoBytesHeader = new TwoByteHeader();
var headerBuffer = new byte[twoBytesHeader.HeaderLength];
using (var binaryReader = new BinaryReader(stream, Encoding.ASCII, true))
{
headerBuffer = binaryReader.ReadBytes(twoBytesHeader.HeaderLength);
int newOffset;
var msgLength = twoBytesHeader.GetMessageLength(headerBuffer, 0, out newOffset);
var buffer = binaryReader.ReadBytes(msgLength);
string msgASCII = Encoding.ASCII.GetString(buffer);
var bufferToSend = await ProcessMessage(msgASCII);
using (var binaryWriter = new BinaryWriter(stream, Encoding.ASCII, true))
{
binaryWriter.Write(bufferToSend);
binaryWriter.Flush();
}
//Thread.Sleep(1000);
}
}
}
Когда Сон раскомментирована, клиент получает ответ, а затем указывает на то, что клиент disconected. Я не могу понять причину такого поведения.
Если вам нужно быть уверенным, что при отправке ваших данных не было ошибок, тогда async может не быть ответом, конечно, вы хотите отправить его, знать, что его отправили, а затем закрыть? – BugFinder
Благодарим за отзыв. В этом случае я ожидаю WriteAsync, поэтому он будет ждать, пока все байты будут отправлены и только затем закроют соединение. Должно быть что-то еще, что я делаю неправильно. – GAG