我使用com2tcp隧道软件(在Windows 7上运行)连接到TCP服务器(用C语言编写,在嵌入式Linux平台上运行) . 首先 Build 连接,客户端以500ms-1秒的间隔连续发送命令,同时获得响应,这意味着TCP客户端/服务器通信正常运行 .
要了解问题是否与com2tcp隧道软件有关,我写了类似的东西,代码在这里(在C#中):
/* Connect to server */
client = new TcpClient(IpAddress, Port);
stream = client.GetStream();
/* Open virtual serial port */
port = new SerialPort(virt, 19200, Parity.None, 8, StopBits.One);
port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
port.Open();
使用下面的代码(Thread函数)将串行端口上的数据发送到TCP Socket .
SerialReadTCPSend()
{
Int32 ret = port.Read(buff2, 0, port.BytesToRead);
Console.Write("Serial Data, number of bytes: ");
Console.WriteLine(string.Format("{0}", ret));
Console.WriteLine(BitConverter.ToString(buff2, 0, ret));
stream.Write(buff2, 0, ret);
}
使用以下代码将TCP套接字中接收的数据发送到串行端口(线程函数)
TCPReceiveSerialWrite()
{
Int32 bytes = stream.Read(buff1, 0, client.Available);
Console.Write("TCP Data, number of bytes: ");
Console.WriteLine(string.Format("{0}", bytes));
Console.WriteLine(BitConverter.ToString(buff1, 0, bytes));
port.Write(buff1, 0, bytes);
}
现在的问题是;一段时间后(此时间是随机的)客户端软件停止读取tcp数据包(读取调用 stream.Read
只是块),wireshark显示来自服务器的数据到达客户端并且服务器接收来自客户端的命令( SerialReadTCPSend
正常工作,而 TCPReceiveSerialWrite
没有;它块 stream.Read
) .
wireshark还显示服务器发送的每个数据包中的CRC错误(但客户端收到的数据是预期的) .
请帮助我理解和调试问题 .