zoukankan      html  css  js  c++  java
  • socket粘包分包处理

    public static string Remaning(NetworkStream networkStream)
            {
                string msg = string.Empty;
                int headSize = 4; //包头长度
                int bufferSize = 20; //缓冲区长度
                byte[] headData = new byte[headSize]; //包头数据
                byte[] bufferData = new byte[bufferSize]; //缓冲区数据
                networkStream.Read(headData, 0, headData.Length); //读取包长度
                int dataSize = BitConverter.ToInt32(headData, 0); //数据总长度
                byte[] recvData = new byte[dataSize]; //接收完整数据的缓冲区
    
                while (dataSize > 0)
                {
                    //需要接收的数据大于缓冲区,则按缓冲区大小接收,反之按照剩余的数据大小进行接收
                    int offset = dataSize < bufferSize ? dataSize : bufferSize;
                    byte[] readData = new byte[offset];
                    int readSize = 0; //读取数据的大小
                    readSize = networkStream.Read(readData, 0, offset);//将接收到的字节数保存
                    readData.CopyTo(recvData, recvData.Length - dataSize);
                    dataSize -= readSize;
                }
    
                msg = Encoding.UTF8.GetString(recvData, 0, recvData.Length);
    
                Console.WriteLine("MSG:" + msg);
    
    
                return msg;
            }
  • 相关阅读:
    2014 非常好用的开源 Android 测试工具
    Android 开发最佳实践
    Java_综合案例DAO设计模式(重要)
    Java_Set接口
    Java_List
    Java_类集框架简介
    Java_对象序列化
    Java_打印流
    Java_IO编程
    Java_文件操作
  • 原文地址:https://www.cnblogs.com/docomo/p/14053232.html
Copyright © 2011-2022 走看看