[C#]asynchrone read van networkstream

Pagina: 1
Acties:

  • TUX2K
  • Registratie: September 2001
  • Laatst online: 13-02 13:52
Misschien ligt het wel aan mij dat ik het concept niet snap maar dan hoop ik dat iemand het mij kan uitleggen.
Het volgende, ik werk voor het eerste met een asynchrone socket in .NET C#.
Bij het lezen van gegevens gebruik ik de functie BeginRead van NetworkStream.
Tot hier gaat het goed, echter moet je een byte array begeven aan deze functie en de grote van de te lezen buffer.
Maar door dat ik niet van te voren weet hoe groot het ontvangen bericht is het moeilijk te bepalen hoe groot het array moet zijn.
Want als ik te weinig uitlees mis ik een deel van het bericht, welke in XML is geschreven en dus er is als ik wat mis.
Nu begrijp ik dat ik gewoon moet door lezen uit de socket, maar hoe.
Wat ik heb een byte array me gegeven aan de functie begin read.

( voorbeelden op internet die door lezen werken niet, want deze gaan er van uit dat er een einde komt en sluiten dan de socket, bij blijft er data komen. Deze komen met tussen posen van de server.)

  • MLM
  • Registratie: Juli 2004
  • Laatst online: 12-03-2023

MLM

aka Zolo

achterhaal hoe groot het bericht is, door
1) je protocol zodanig aan te passen dat je voordat je de daadwerkelijke informatie verstuurd, eerst de lengte verstuurd
2) ontvangen informatie te parsen (in jouw XML, wacht tot je de laatste sluittag binnen hebt)

-niks-


  • FTL
  • Registratie: Maart 2000
  • Laatst online: 13-02 23:37

FTL

Een truuk die ik veel toepas is bij asynchrone sockets is 0 op te geven bij de BeginRead functie en pas in de callback pas echt zelf uit de stream te halen en in de byte[] te plaatsen.
Werkt perfect.

  • TUX2K
  • Registratie: September 2001
  • Laatst online: 13-02 13:52
FTL schreef op dinsdag 25 juli 2006 @ 14:41:
Een truuk die ik veel toepas is bij asynchrone sockets is 0 op te geven bij de BeginRead functie en pas in de callback pas echt zelf uit de stream te halen en in de byte[] te plaatsen.
Werkt perfect.
Kijk daar heb ik wat aan, want het protocol hab ik niet gemaakt dus het andere antwoord gaat niet op.
Zal deze truk eens toe passen ;)