Bonjour à tous,
Je me bat depuis plusieurs jours pour essayer d'écrire un client simple pour faire du Telnet.
Mon problème majeur est la gestion des réponses provenant du serveur. Je n'arrive pas à trouver la bonne solution pour savoir déterminer que le serveur n'envoie plus rien.
Ma meilleure solution trouvée est de mettre un timeout sur la lecture et d'attraper l'exception; mais elle ne me satisfait pas pleinement car la connexion est alors perdue.
J'utilise les méthodes synchrones, car je ne souhaites pas que le client puisse envoyer d'autres commandes tant que la première n'est pas complètement terminée.
Le problème majeure, est que l'information fournie par MSDN est fausse.
La méthode Read (sur NetworkStream) est bloquante, tant qu'il n'y a pas de données à lire.This method reads data into the buffer parameter and returns the number of bytes successfully read. If no data is available for reading, the Read method returns 0. The Read operation reads as much data as is available, up to the number of bytes specified by the size parameter. If the remote host shuts down the connection, and all available data has been received, the Read method completes immediately and return zero bytes.
Dernier point, ni TcpClient.Available, ni NetworkStream.DataAvailable ou encore Socket.Available (tous les trois les mêmes appels en fait) n'est fiable car utilisée en boucle, l'appel est beaucoup trop rapide par rapport à l'arrivée des données. Ajouter un Thread.Sleep() ne me semble pas etre une belle solution.
Voila, désolé pour la tartine...
Merci d'avance,
Partager