J'ai fait un simple serveur d'écoute tcp auquel je me connecte depuis mon téléphone mobile pour contrôler mon plafonnier. Mais chaque maintenant et puis il se coince à un StreamReader.ReadLine du client connectiongC# TcpListener streamreader.readline est bloqué
TcpListener listener = new TcpListener (IPAddress.Any, 8001);
listener.Start();
//--------------------------MAIN LOOP--------------------------
while (true)
{
//Recieve connection and take care of response
Console.WriteLine ("Awaiting connection");
TcpClient client = listener.AcceptTcpClient();
Console.WriteLine ("Client accepted");
StreamReader sr = new StreamReader (client.GetStream());
Console.WriteLine ("1:3");
StreamWriter sw = new StreamWriter (client.GetStream());
Console.WriteLine ("1:4");
string fullrequests = "/no/request/value";
Console.WriteLine ("1:5");
fullrequests = sr.ReadLine(); <---- IT'S STUCK HERE
Console.WriteLine ("1:6");
Il est coincé pour que « 1: 6 » n'est imprimé à l'écran. Si je recharge la connexion de mon téléphone, il passe et redémarre mais reste au même endroit. Si je me faufile dans une autre connexion d'un autre appareil entre les deux, il y a une chance que cela redevienne normal. Des idées sur pourquoi c'est ou comment le contourner?
Envoyez-vous une chaîne avec un caractère de nouvelle ligne (s) à la fin? – Stilgar
cette ligne attend la chaîne entrante avec "\ n" à la fin. –
'ReadLine()' est la méthode de blocage. Il bloquera jusqu'à ce que la ligne arrive (message texte avec '" \ xD \ xA "' à la fin). Vous pouvez essayer de définir le délai, lire de manière asynchrone ou lire octets/chaîne .. mais pas la ligne. Le plus facile est probablement de vérifier avant de lire. – Sinatr