当第二次发出请求时,TcpClient.GetStream()。Read()读取错误的字节。

维兰

新成员
已加入
2019年3月11日
留言内容
1
编程经验
1-3
在我的Windows应用程序中,使用NetworkStream通过TCP / IP在客户端和服务器之间进行通信。当客户端发送消息(命令的字节数组)时,正确福彩12选5走势图到响应。但是第二次发出请求时,响应中的字节顺序已更改。从服务器福彩12选5走势图到错误的数据。这是代码。

处理页面加载中的数据福彩12选5走势图的线程:
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);
        }

当我运行应用程序时(状态获胜表格)正确福彩12选5走势图数据,但是当我再次单击状态时,从stream.read()读取的数据不正确。

我将以close()形式关闭客户端连接。每次出现问题都可能从流中读取一个字节或正确关闭连接。
 
由主持人最后编辑:
最佳 底部