在我的Windows应用程序中,其中客户端和服务器之间的通信使用NetworkStream通过TCP / IP进行。当客户端发送消息(命令的字节数组)时,响应已正确接收。但是,在请求时第二次,响应中的字节顺序已更改。从服务器收到了错误的数据。它是代码。
在页面加载中处理数据接收的线程:
写入流:
从小读取:
当我运行应用程序(状态Win表单)时正确接收数据。写入时再次单击状态时,从Stream.read()读取的数据不正确。
我在form close()中关闭客户端连接。可能每次都是从流读取一个字节是问题或结束连接正确。
在页面加载中处理数据接收的线程:
C#:
ThreadDatareceive = new Thread(new ParameterizedThreadStart(udfHandleClientCommunication)); ThreadDatareceive.Start(Class.myclient);
ThreadDatareceive.Start(Class.myclient);
写入流:
C#:
bal.byteCommand = new byte[] { 0x90, 0x20, 0x02, 0x01, 0x00, 0x00, 0x01, 0xB0 };
if (Class.myclient.Connected)
{
stream = Class.myclient.GetStream();
stream.Write(bal.byteCommand, 0, bal.byteCommand.Length);
bal.EventNum = 1;
bal.timer.Start();
bal.byteResponse.Clear();
}
//Scan();
else
MessageBox.Show("Please Configure the Module");
从小读取:
C#:
private void udfHandleClientCommunication(object client)
{
if (this.InvokeRequired)
{
MyDelegate1 mydelegate2 = new MyDelegate1(udfHandleClientCommunication);
this.Invoke(mydelegate2, new object[]{client});
}
else
{
try
{
//List byteData = new List();
while (true)
{
tcpClient = (TcpClient)client;
stream2 = tcpClient.GetStream();
byte[] byteBuffer = new byte[1];
//Array.Clear(byteBuffer, 0, byteBuffer.Length);
stream2.Read(byteBuffer, 0, byteBuffer.Length);
bal.byteResponse.AddRange(byteBuffer);
try
{
switch (bal.EventNum)
{
case 1:
// The scan response is of 97 bytes. So,
// wait for the full response
// before processing the response data.
if (bal.byteResponse.Count >= 97)
{
if(bal.byteResponse[2] == 0x42)
{
udfReadStatusResponse();
break;
}
}
case 2:
// The scan setup is of 11 bytes. So,
// wait for the full response
// before processing the response data.
if (bal.byteResponse.Count >= 11)
{
if(bal.byteResponse[2] == 0x43)
{
udfReadSetupResponse();
break;
}
}
}
}
catch
{
bal.DataReceivedFlag = false;
bal.TimeouFlag = true;
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
当我运行应用程序(状态Win表单)时正确接收数据。写入时再次单击状态时,从Stream.read()读取的数据不正确。
我在form close()中关闭客户端连接。可能每次都是从流读取一个字节是问题或结束连接正确。
最后编辑了主持人: