Pourquoi ca plante chez moi :heink:
ns = NetworkStream
sr = StreamReader
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 string Response = ""; char[] c=null; StringBuilder databuild = new StringBuilder(""); if (ns != null) { if(ns.DataAvailable) { while (sr.Peek() >= 0) { c = new char[1024]; sr.Read(c, 0, c.Length); databuild.Append(c); } Response = databuild.ToString(); } } return Response;
Edit:
J'explique en détail le contexte,
J'ai un serveur qui envoie des infos par paquet de char[] 1024 à l'aide d'un streamwriter.
Ce code correspond au coté client qui recoit les paquets, je les lis donc tant qu'il y a des données sur le streamreader while(sr.peek() >= 0) on lis un paquet de 1024.
Mais ce code (pris sur le msdn de microsoft) plante.
J'ai fais pas à pas pour voir le probleme et je constate que:
Mon serveur envoie deux paquet au départ (jusque la normal),
le programme coté client rentre dans la boucle, car if (ns.dataavailable) est bien a true. Mon streamreader doit donc avoir recu les 2048 caracteres (des deux paquets de 1024 envoyer par le serveur),
donc le programme fais un premier Read, le premier paquet de 1024 est bien lu.
Ensuite ma boucle while (sr.peek >=0) informe le programme qu'il y a encore des données, il reste en effet le deuxieme paquet a lire,
donc le programme continue dans la boucle et refais un read, ce coup ci juste apres le read il plante méchant ! le programme gele et j'ai plus qu'a arreter le debug...
Je comprend donc qu'il plante car j'ai "sucer" tout le contenue du streamreader... je suis au courant que lorsqu'on fais un .read sur un streamreader vide ca plante, mais la le mien contenait encore des infos... j'ai juste tout "sucer"...
alors bon, si ce code plante j'aimerai un coup de pouce pour y remedier merci pour votre aide
Partager