我用C# socekt的接受数据!!接过来第一包有22100的byte后面接就卡得要死   我这22100的数据  FF是开头  EE是结尾 算是一条数据  我要怎么把这些数据区分开来
byte[] by=new byte[socket.av....];自动获取大小的   我要怎么判断

解决方案 »

  1.   

    如果是PC机,一次收22K的包的就卡死,绝对是你自己的程序有问题,
    而且如果是你一次发送22K的数据,正常情况下不会分包发送,也就是说
    你的Available == 22100
    还有就是Buffer不要动态开,一般都是指定大小如果1024,4096之类的数值去接收属具.
    Avaliable只是作为一个标记判断有数据来了,到底能收到多少数据,看Receive的返回值给你个例子,自己扩展
                const int msgLength = 22100;
                int curReceivedLength = 0;            while(true)
                {
                    if(s.Available > 0)
                    {
                        byte[] buffer = new byte[s.Available];
                        int receivedLength = s.Receive(buffer, SocketFlags.None);                    if(buffer[0] == 0xFF && curReceivedLength == 0)
                        {    
                            //收到新的Msg
                            //to do
                        }                     curReceivedLength += buffer.Length;                     if (buffer[buffer.Length - 1] == 0xEE && curReceivedLength == msgLength)
                        {
                             //Msg接收完毕
                             //to do
                            curReceivedLength = 0;
                        }
                    }
                    else
                    {
                        Thread.Sleep(100);
                    }
                }