Ich habe einen TCP-Server geschrieben, in dem die Anzahl der zu lesenden Bytes im Header mit zwei Bytes vorangestellt ist. Nach dem Lesen aus dem Stream und dem Zurücksenden der Antwort an den Client werden sowohl NetworkStream als auch TcpClient entfernt. Das Problem ist, dass der Client meine Antwort nicht zu erhalten scheint, wenn ich die Thread.Sleep() Zeile nicht auskommentiere. Hier ist der Code:NetworkStream Sleep() Problem
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);
}
}
}
Wenn Schlaf unkommentiert ist, der Kunde erhält Antwort und zeigt dann an, dass die Client-disconected hat. Ich kann den Grund dieses Verhaltens nicht herausfinden
Wenn Sie sicher sein müssen, dass beim Senden Ihrer Daten kein Fehler aufgetreten ist, dann ist async möglicherweise nicht die richtige Antwort, Sie möchten es senden, wissen, dass es gesendet wurde und dann schließen? – BugFinder
Vielen Dank für die Antwort. In diesem Fall erwarte ich WriteAsync, so dass es warten wird, bis alle Bytes gesendet sind und erst dann die Verbindung schließen. Es muss noch etwas anderes geben, was ich falsch mache. – GAG