Problem mit TCP Kommunikation

13/12/2007 - 15:24 von simpleware | Report spam
Hallo!
Hier mein Code:
Int32 bytes = stream.Read(response, 0, response.Length);
// System.Threading.Thread.Sleep(100);

stream ist ein NetworkStream object, erstellt mit einem TcpClient.
Wenn ich die zweite Zeile aktiviere, enthàlt response einen gültigen Wert.
Wenn ich sie auskommentiere, enthàlt response nur ein Teil des Wertes.

Hat jemand eine Idee???
 

Lesen sie die antworten

#1 Thomas Scheidegger
13/12/2007 - 15:36 | Warnen spam
Hallo

Int32 bytes = stream.Read(response, 0, response.Length);
// System.Threading.Thread.Sleep(100);
stream ist ein NetworkStream object, erstellt mit einem TcpClient.
Wenn ich die zweite Zeile aktiviere, enthàlt response einen gültigen Wert.
Wenn ich sie auskommentiere, enthàlt response nur ein Teil des Wertes.



ist 'by design'.
TCP ist ein Byte-Stream, kennt keine 'Pakete' (oder Telegramme).
Bei Read gibt man nur eine _maximale_ Anzahl zu lesende Bytes an, nicht die geforderte Anzahl.

Es gibt bei TCP keinen direkten Zusammenhang von der (mit Write/Send) gesendeten Datenlànge
zur Lànge bei Read/Recv.
Fragmentierung (und Zusammenfügen) ist jederzeit möglich, je nach Netzwerk/Timing usw.


P.S.
Dies gilt konzeptionell auch für div. Datei-Stream-Read,
obschon die momentane Win32-Implementation anscheinend die volle Anzahl liefert.
(worauf man sich besser nicht verlàsst)


Thomas Scheidegger - 'NETMaster'
http://www.cetus-links.org/oo_dotnet.html - http://dnetmaster.net/

Ähnliche fragen