Diskuze: NetworkStream.Read(Byte[], Int32, Int32) - čekání na celou zprávu
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 8 zpráv z 8.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Nejdřív by možná bylo dobrý zmínit, jakou třídu k té TCP komunikaci používáš
Jo to mi tam nějak vypadlo
TCPClient <> TCPListener a NetworkStream pro oba
Read data jako navratovou hodnotu vrací počet skutečně přečtených bytu, může jich přečíst méně. TCP ti zaručuje, že přijdou všechny části a že přijdou správně seřazeny. Na serveru ale není jisté, že budou v jednom "readu" všechny.
Proto ta děláš běžně to, že tam máš ještě jeden cyklus, kde ctes z Readu() dokud ti nedorazi zprava cela (pocitas si byty). No a vzdy prectes a zapises to do bufferu (pomoci toho Read()). A az kdyz ti
pocet celkove prectenych pomoci read = velikost zpravy.
Tak víš, že zpráva je celá a správně splitnutá.
No jasné no, to jsem věděl, ostatně moje otázka v poslední větě byla jestli si to prostě musím zacyklit sám nebo na to v .NETu existuje něco jiného nebo nějaký fýgl
Samozrejme ze na to v .NETu existuje tisíce a jedna knihovna, jako všude jinde. Zalezi jen na tom, jak moc vyssi reseni chces. Jedno z nich je treba WCF
Spíš by mi stačilo ten buffer předávát do bufferu, který bude mít, read který čeká na celý počet bytů co zadám
Rozhodně nic co by zapříčinilo velké přepisování to si můžu rovnou udělat ten cyklus
Jen ten kód nechci zaplácávat cyklama na to čtení pokud existuje možnost jednoho konstruktoru a jedné metody třeba
No nic,tak to balím do cyklu
Zobrazeno 8 zpráv z 8.