目前我正在開發一個網絡項目,其中包括連接到tcp服務器和一些設備。很長一段時間,我成功地使用了下面的代碼來發送tcp命令並接收某些設備模型的響應,但是當我嘗試使用Windows Telnet Server 2003和Fortigate設備時,即使我可以成功建立tcp連接,我仍然可以獲得響應有些字符集像??%??????'。c#TcpClient無法從成功連接的遠程登錄服務器/設備讀取有效響應
我的用於接收響應函數是:
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();
我測試接收到的消息的裝置,其上面的代碼工作沒有問題,並我意識到,對於每種不同的設備型號,最初的響應總是像「??%??????'????」但隨後像「歡迎」與
邏輯的反應在我的測試中,我發現了程序連接到服務器/設備成功,但不能接收到有效的迴應,我不知道爲什麼。對此有何想法?