StreamReader : lancer le ReadLine() jusqu'a ce qu'il n'y en ai plus ? [Résolu]

Signaler
Messages postés
54
Date d'inscription
mardi 22 mars 2005
Statut
Membre
Dernière intervention
13 mars 2007
-
Messages postés
131
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
7 juillet 2005
-
Voila, je fais un vieux truc en TCP avec TCPClient et StreamReader/StreamWriter.
Je voudrais une boucle simple qui lit jusqu'a ce qu'il n'y ai plus rien à lire, genre par exemple apres 3 secondes sans nouvelles du truc.
Comment puis-je m'y prendre ?

Merci d'avance.

10 réponses

Messages postés
131
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
7 juillet 2005

oups sans le point

if(strin[strin.Length - 1] == '>')

hum.......
Messages postés
131
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
7 juillet 2005

Bonjour,


ReadToEnd();

pas besoin de boucle

hum.......
Messages postés
54
Date d'inscription
mardi 22 mars 2005
Statut
Membre
Dernière intervention
13 mars 2007

Je fais ceci :


string strin;


strin = clientStreamReader.ReadLine();


Console.WriteLine(strin);



string strout = "<HELLO 1 "" password=Llama>\n<TALK "yax" 1 "yax1" "md5" "">";


clientStreamWriter.WriteLine(strout);


Console.WriteLine(strout);


clientStreamWriter.Flush();


strin = clientStreamReader.ReadToEnd();


Console.WriteLine(strin);

Et ca bloque au niveau du ReadToEnd justement, il print queudall, alors qu'en enchainant les ReadLine/Console.WriteLine il print correctement.

Pourquoi ceci ?
Messages postés
54
Date d'inscription
mardi 22 mars 2005
Statut
Membre
Dernière intervention
13 mars 2007

Ok :

in which the server sends data only when you ask for it and does not close the connection, ReadToEnd might block indefinitely and should be avoided.

Donc j'ai quoi comme autre solution ? :)
Messages postés
131
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
7 juillet 2005

Moi j'ai un truc du genre


sTxt = FluxReadImporter.ReadLine();
while ( FluxReadImporter.BaseStream.Position < FluxReadImporter.BaseStream.Length)
{
sTxt = FluxReadImporter.ReadToEnd();
}
Mais ca me fait douter de l'utilité de ma boucle ...

hum.......
Messages postés
54
Date d'inscription
mardi 22 mars 2005
Statut
Membre
Dernière intervention
13 mars 2007

La fin des données envoyées par ce maudit protocole YAX est du type
"blabla
>"

J'ai tenté :


while ((strin=clientStreamReader.ReadLine()) != ">")


{


Console.WriteLine(strin);


}

Mais ça bloque encore :/
Messages postés
54
Date d'inscription
mardi 22 mars 2005
Statut
Membre
Dernière intervention
13 mars 2007

while (
true)


{


strin=clientStreamReader.ReadLine();


Console.WriteLine(strin);



if(strin.Equals(">"))



break;


}

Toujours aucun resultat. Joie.
Messages postés
131
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
7 juillet 2005

essaye un truc du genre

if(strin[strin.Length - 1] == .'>')

break;

hum.......
Messages postés
54
Date d'inscription
mardi 22 mars 2005
Statut
Membre
Dernière intervention
13 mars 2007

Ca fonctionne. Merci bien !
Messages postés
131
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
7 juillet 2005

Juste une derniere chose accepte les reponses :)

hum.......