C# TCP客户端接收数据不正确

C# TCP客户端接收数据不正确,c#,tcpclient,C#,Tcpclient,不确定这是TCPClient还是其他什么,我使用了网络嗅探器来检查从服务器发送和接收的内容,数据是正确的,但是我的软件接收数据不正确 让我解释一下,我发送一个查询字节(05)我得到一个回执(06),然后我发送一些以9B字节开始的数据,一旦发送了,我应该接收一个06字节,然后在该字节之后我应该得到一个C5字节,但是根据我的软件,我得到另一个06字节,根据嗅探器,情况并非如此 byte[] buff; if (!this.isConnected()) this.connect(); Ne

不确定这是TCPClient还是其他什么,我使用了网络嗅探器来检查从服务器发送和接收的内容,数据是正确的,但是我的软件接收数据不正确

让我解释一下,我发送一个查询字节(05)我得到一个回执(06),然后我发送一些以9B字节开始的数据,一旦发送了,我应该接收一个06字节,然后在该字节之后我应该得到一个C5字节,但是根据我的软件,我得到另一个06字节,根据嗅探器,情况并非如此

byte[] buff;
if (!this.isConnected())
    this.connect(); 

NetworkStream gs = _Socket.GetStream();

gs.Write(enq, 0, enq.Length);
gs.Flush();
outputByte(enq, "Trans"); //outputs ---> 05

buff = new byte[1];
gs.Read(buff, 0, buff.Length);
gs.Flush();
outputByte(buff, "Rec");// outputs <--- 06

if (buff[0] == 0x06)
{
    byte[] data = new byte[] {
                                            0x9B, 0x00,         0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x09,         
        0x67, 0x11, 0x01, 0x49, 0x4D, 0x41, 0x47, 0x45,         0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,         
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,         0x01, 0x53, 0x75, 0x6D, 0x6D, 0x61, 0x72, 0x79,         
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,         
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,         0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x08, 0x00,         
        0x00, 0x00, 0x1F, 0x09, 0x01, 0x00, 0x04, 0x0A,         0x10, 0x00, 0x12, 0x01, 0x1F, 0x00, 0x00, 0x00,         
        0x05, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,         0x12, 0x10, 0x1E, 0x0E, 0x1E, 0x54, 0x65, 0x73,         
        0x74, 0x69, 0x6E, 0x67, 0x10, 0x00, 0x12, 0x01,         0x1F, 0x00, 0x00, 0x00, 0x05, 0x00, 0x01, 0x00,         
        0x00, 0x00, 0x00, 0x00, 0x12, 0x10, 0x0D, 0x00,         0x00, 0x90
    };
    outputByte(data, "Trans"); /outputs --> with above byte information
    gs.Write(data, 0, data.Length);
    gs.Flush();

    buff = new byte[1];
    gs.Read(buff, 0, buff.Length);
    gs.Flush();
    // this is the first receive of 06
    outputByte(buff, "Rec");//outputs <--- 06

    if (buff[0] == 0x06)
    {
        gs.Flush();
        Console.WriteLine("fdsfsdfs");
        byte[] resp = new byte[5];
        gs.Read(resp, 0, resp.Length);
        gs.Flush();
        //this outputs <--- 06 but it should be showing <--- c5000100c4
        outputByte(buff, "Rec"); 
        gs.Write(ack, 0, ack.Length);
        outputByte(ack, "Trans");
        gs.Flush();
    }
}
byte[]buff;
如果(!this.isConnected())
这个.connect();
NetworkStream gs=_Socket.GetStream();
gs.写入(enq,0,enq.长度);
gs.Flush();
输出字节(enq,“Trans”)//输出--->05
buff=新字节[1];
总读数(增益,0,增益长度);
gs.Flush();
输出字节(buff,“Rec”);//具有以上字节信息的输出
写入(数据,0,数据长度);
gs.Flush();
buff=新字节[1];
总读数(增益,0,增益长度);
gs.Flush();
//这是06年的第一次接收

输出字节(buff,“Rec”)//输出此处:您输出了错误的缓冲区:

    gs.Read(resp, 0, resp.Length);
    gs.Flush();

    outputByte(buff, "Rec");  <==== should be "resp"
然后:


将正确填充,如果流中没有足够的数据,则会出错。

此处:您输出了错误的缓冲区:

    gs.Read(resp, 0, resp.Length);
    gs.Flush();

    outputByte(buff, "Rec");  <==== should be "resp"
然后:


将正确填充,如果流中没有足够的数据,则会出现错误。

我要说的第一件事是:您能输出每个
读取
调用的结果吗。@MarcGravel这就是outputByte函数所做的,这就是上面显示的!我要说的第一件事是:您能输出每个
读取
调用的结果吗。@MarcGravel这就是outputByte函数所做的,这就是上面显示的!天哪,这就是为什么我讨厌同时处理多件事情,2个c#项目一个网站和2台笔记本电脑进行修复,马克非常感谢你,我根本看不到这个错误,更改了它,现在它是正确的,再次感谢ReadExact功能我会尽快实现它,我也需要一些东西来写吗?天哪,这就是为什么我讨厌同时处理多件事情,2个c#项目一个网站和2台笔记本电脑进行修复,马克,非常感谢你,我根本看不到这个错误,更改了它,现在它是正确的,再次感谢ReadExact功能,我会尽快实现它,我也需要一些写作材料吗?
    gs.Read(resp, 0, resp.Length);
    gs.Flush();

    outputByte(buff, "Rec");  <==== should be "resp"
public static void ReadExact(this Stream stream, byte[] buffer,
           int offset, int count) {
    int read;
    while(count > 0 && (read = stream.Read(buffer, offset, count)) > 0) {
        count -= read;
        offset += read;
    }
    if(count != 0) throw new EndOfStreamException();
}
gs.ReadExact(resp, 0, resp.Length);