В настоящее время я работаю над сетевым проектом, который включает в себя подключение к tcp-серверам и некоторым устройствам.В течение долгого времени я успешно использовал приведенный ниже код для отправки команды tcp и получения ответов для некоторых моделей устройств, но когда я пробую это для Windows Telnet Server 2003 и устройства Fortigate, даже если я могу успешно создать соединение tcp, все, что я могу получить в ответэто какой-то набор символов, например ??% ?????? '????.
Моя функция для получения ответа:
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();
}
}
и для создания соединения tcp и получения вызовафункция:
TcpClient tcpClient = new TcpClient()
{
SendTimeout = 10000,
ReceiveTimeout = 10000
};
tcpClient.Connect(wanIp, 23);
String initialMessage = receive();
Я проверил полученные сообщения для устройств, код которых выше работает без проблем, и я понял, что для каждой отдельной модели устройства первоначальный ответ всегда что-то вроде "??% ??????«????»но за ним следовали логические ответы, такие как «добро пожаловать» против
Во время моих тестов я обнаружил, что программа успешно подключается к серверу / устройству, но не может получить действительные ответы, чего я не знаю, почему.Есть идеи по этому поводу?