【发布时间】:2010-12-13 16:36:47
【问题描述】:
目前我正在处理一个网络项目,其中包括连接到 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();
我测试了设备收到的消息,上面的代码没有问题,我意识到对于每个不同的设备型号,初始响应总是类似于“??%??????'????”但随后是逻辑响应,例如“欢迎”与
在我的测试过程中,我发现程序成功连接到服务器/设备,但无法接收有效响应,我不知道这是为什么。有什么想法吗?
【问题讨论】: