Actuellement, je travaille sur un projet réseau qui inclut la connexion aux serveurs TCP et à certains périphériques. Pendant longtemps, j'ai utilisé le code ci-dessous pour envoyer des commandes tcp et recevoir des réponses pour certains modèles de périphériques, mais quand je l'essaye pour Windows Telnet Server 2003 et un périphérique Fortigate, même si je peux créer une connexion tcp avec succès est un jeu de caractères comme ??% ?????? '????C# TcpClient ne peut pas lire la réponse valide du serveur/périphérique Telnet connecté avec succès
Ma fonction de la réponse de réception est:
private string receive()
{
StringBuilder sbReadBuffer = new StringBuilder();
bool isFinished = false;
NetworkStream ns = tcpClient.GetStream();
DateTime lastConTime = DateTime.Now;
while (!isFinished)
{
if (!ns.DataAvailable)
{
Thread.Sleep(200);
if ((DateTime.Now - lastConTime).TotalSeconds > Prms.tcpSendReceiveTimeoutInSeconds)
break;
else
continue;
}
Int32 receiveCount = ns.Read(receiveBuffer, 0, receiveBuffer.Length);
String received = new ASCIIEncoding().GetString(receiveBuffer, 0, receiveCount);
sbReadBuffer.Append(received);
foreach (String terminaterToken in terminaterTokens)
if (sbReadBuffer.ToString().EndsWith(terminaterToken))
isFinished = true;
lastConTime = DateTime.Now;
}
return sbReadBuffer.ToString();
}
}
et pour la construction de connexion tcp et appeler fonction de réception:
TcpClient tcpClient = new TcpClient()
{
SendTimeout = 10000,
ReceiveTimeout = 10000
};
tcpClient.Connect(wanIp, 23);
String initialMessage = receive();
J'ai testé les messages reçus pour les périphériques qui code ci-dessus fonctionne sans problème et J'ai réalisé pour chaque modèle de périphérique différent la réponse initiale est toujours quelque chose comme "??% ?????? '????" mais il a suivi par des réponses logiques comme "bienvenue" contre
Pendant mes tests j'ai découvert que le programme se connecte au serveur/à l'appareil avec succès mais ne peut pas recevoir des réponses valides, dont je ne sais pas pourquoi. Une idée à ce sujet?