解决方案 »

  1.   


    你收到的包头长度变了吧。你看看result的长度是多少 包头的长度超出了result的长度了。
      

  2.   

       bytes = c.Receive(recvBytes, recvBytes.Length, 0);//从服务器端接受返回信息  这代码写的有问题呀
                    if (bytes > 0)
                    {
                        byte[] temp = new byte[bytes];  你光new这里? 没有把实际的上面 reciveBytes传进去呀 这样里面全是空的
                        queue.Enqueue(temp);
    要改成  byte[] temp = new byte[bytes];  
      Buffer.BlockCopy(recvBytes,0,temp,0,bytes);
     queue.Enqueue(temp);
      

  3.   


    首先抛开你的代码不说 以下是我修改以后  接收的数据 奇怪现在好像可以正常完整接收?因为我拿到完整的一个数据包还要做解析处理的 int port = 4001;
                    string host = "192.168.0.80";
                    IPAddress ip = IPAddress.Parse(host);
                    IPEndPoint ipe = new IPEndPoint(ip, port);//把ip和端口转化为IPEndPoint实例
                    Socket c = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个Socket
                    Console.WriteLine("Conneting...");
                    c.Connect(ipe);//连接到服务器                while (true)
                    {
                        //建立缓冲区
                        byte[] recByte = new byte[4096];
                        int bytes = c.Receive(recByte, recByte.Length, 0);//从服务器端接受返回信息                    //分多次接收
                        byte[] reallData = new byte[bytes];
                        Array.Copy(recByte, reallData, reallData.Length);                    //解析雷达数据 包含平均速度/占有率/车流量
                        string data = BitConverter.ToString(reallData);
                        Console.WriteLine(data);
                    }
      

  4.   


    你那样子当然可以正常接收。你就是少了  //分多次接收
                        byte[] reallData = new byte[bytes];
                        Array.Copy(recByte, reallData, reallData.Length); 这个呀
    你要把这货也在放进去呀,Copy之后再Enqueue
      

  5.   

    这个缓冲区写的有BUG 这里面要改成下面的 private int IndexOf(List<byte> source, byte[] seach, int startIndex)
            {
                string baseStr = BitConverter.ToString(source.ToArray());
                string searchStr = BitConverter.ToString(seach);
                int x=baseStr.IndexOf(searchStr, startIndex) ;
                return x==-1?-1:  x / 3;
            }