Salutations, J'ai un client Telnet personnalisé en C#. Je l'utilise pour communiquer avec les serveurs IMAP. Cela fonctionne comme une simple commande d'écriture, puis une réponse. Code d'essai:Comment synchroniser la lecture/écriture au flux?
Telnet tc = new Telnet();
// setup server credentials
const string server = "pop.nexlink.net";
const int port = 140;
const int timeout = 70;
// establish server connection
tc.Setup(server, port, timeout);
// test initial server response
Console.WriteLine(tc.output);
// set-up a few commands to send
var array = new[] { "USER [email protected]", "PASS password", "QUIT" };
// while connected to server
if (tc.IsConnected)
{
foreach (string str in array)
{
// Show command on console
Console.WriteLine(str);
// Write to Stream
tc.WriteLine(str);
// Read from Stream
tc.Read();
// Test the Stream output
Console.Write(tc.output);
}
}
// close connection
tc.Disconnect();
Sortie d'appeler code ci-dessus est:
- UTILISATEUR [email protected]
- + OK Bienvenue sur le serveur POP3 Atmail - Connexion avec @ domaine utilisateur.
- + OK Mot de passe requis.
- PASS mot de passe
- QUIT
- + OK connecté.
- + OK Au revoir.
Ceci est un exemple simpliste, mais il montre un problème de condition de course. La sortie de la ligne n ° 6 devrait apparaître avant nr. 5
Q: Comment gérer cela?
On dirait que ça va bien. Le serveur reçoit le message Quitter avant la fin de la connexion de l'utilisateur. –
C'est possible. La réponse est plutôt aléatoire. Cela dépend de la vitesse de connexion, du temps de réponse du serveur, de la quantité de données à retourner. Cela devient vraiment désordonné quand il y a plus de commandes demandant chacune de plus gros flux. En général, les lectures sont beaucoup plus lentes que les écritures. – asyncpro