J'utilise un réseau pour transmettre des chaînes courtes sur le réseau.
Maintenant, du côté de la réception j'ai rencontré un problème:
Normalement, je ferais la lecture comme celui-ciNetworkStream.Length substitut
- voir si les données sont disponibles à tous les
- nombre get de données disponibles
- lecture que de nombreux octets dans un tampon
- convertir le contenu du tampon en chaîne.
Dans le code qui suppose travaillent toutes les méthodes proposées comme probablement pour but, qui ressemblerait à quelque chose comme ceci:
NetworkStream stream = someTcpClient.GetStream();
while(!stream.DataAvailable)
;
byte[] bufferByte;
stream.Read(bufferByte, 0, stream.Lenght);
AsciiEncoding enc = new AsciiEncoding();
string result = enc.GetString(bufferByte);
Cependant, MSDN dit que NetworkStream.Length est pas vraiment mis en œuvre et sera toujours jeter une exception lorsqu'il est appelé .
Étant donné que les données entrantes sont de longueur variable, je ne peux pas coder en dur le nombre d'octets à attendre (ce qui serait également le cas de l'antipattern de nombre magique).
Question:
Si je ne peux pas obtenir un décompte précis du nombre d'octets disponibles pour la lecture, alors comment puis-je lire à partir du flux correctement, sans risquer de toutes sortes d'exceptions dans les NetworkStream.Read?
EDIT:
Bien que la réponse fournie conduit à un meilleur code dans l'ensemble je veux encore partager une autre option que je suis tombé sur:
TCPClient.Available donne les octets disponibles à lire. Je savais qu'il devait y avoir un moyen de compter les octets dans sa propre boîte de réception.
[Cela devrait aider] (http://www.codeproject.com/Articles/37496/TCP-IP-Protocol-Design-Message-Framing) –