美文网首页
Socket粘包处理

Socket粘包处理

作者: passiony | 来源:发表于2019-01-22 16:13 被阅读55次
/// <summary>
    /// 接收到消息
    /// </summary>
    void OnReceive(byte[] bytes, int length)
    {
        // 获得请求的字符串,写入到memStream的末端
        memStream.Seek(0, SeekOrigin.End);
        memStream.Write(bytes, 0, length);
        //重置为从menStreamd开头读取
        memStream.Seek(0, SeekOrigin.Begin);

        //int32占用4个字节,ushort占用2个字节
        int lengthCount = 4;
        while (RemainingBytes() > lengthCount)
        {
            //消息的前4个字节表示:字符流的真实长度
            int messageLen = reader.ReadInt32();
            if (RemainingBytes() >= messageLen)
            {
                MemoryStream ms = new MemoryStream();
                BinaryWriter writer = new BinaryWriter(ms);
                //从当前流中读取指定的字节数以写入字节数组中,并将当前位置前移相应的字节数
                writer.Write(reader.ReadBytes(messageLen));
                ms.Seek(0, SeekOrigin.Begin);

                //把消息存到memStream中,交给应用层
                OnReceivedMessage(ms);
            }else{
                //字符流长度不够,往后退两位到int前,跳出循环,等待下次读取
                memStream.Position = memStream.Position - lengthCount;
                break;
            }
        }

        //Create a new stream with any leftover bytes
        byte[] leftover = reader.ReadBytes((int)RemainingBytes());
        memStream.SetLength(0);     //Clear
        memStream.Write(leftover, 0, leftover.Length);
    }

    /// <summary>
    /// 剩余的字节
    /// </summary>
    private long RemainingBytes()
    {
        return memStream.Length - memStream.Position;
    }

相关文章

  • Socket粘包处理

  • Socket粘包处理

    什么是粘包 TCP有粘包现象,而UDP不会出现粘包。 TCP(Transport Control Protocol...

  • 即时通讯

    iOS即时通讯,从入门到“放弃”?socket的半包,粘包与分包的问题iOS 处理socket粘包问题iOS___...

  • socket 粘包拆包处理

    粘包、拆包? 客户端或者服务端不断的发送数据包时,接收的数据会出现两个数据包粘在一起的情况,这就是TCP协议中经常...

  • ios开发中的包的处理

    IOS 详解socket编程[oc]粘包、半包处理 在做socket编程时,如果是做tcp连接,那就不可避免的会遇...

  • iOS Socket封包、粘包、拆包处理

    一、封包 在iOS很多应用开发中,大部分用的网络通信都是http/https协议,除非有特殊的需求会用到Socke...

  • Socket粘包和拆包处理思路

    一旦客户端和服务器建立了Socket通信连接,接下来粘包和拆包就是一个必须要考虑的问题 本文是关于使用TCP协议下...

  • 关于Socket 中粘包的处理

    粘包:指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。出现粘包...

  • TCP粘包拆包

    TCP粘包拆包定义 拆包和粘包是在socket编程中经常出现的情况,在socket通讯过程中,如果通讯的一端一次性...

  • 使用TCP收发消息需要处理的常见问题

    要实现服务器和客户端之间完整的收发消息,需要处理以下的几个问题。 粘包半包问题 粘包就是一次从socket缓冲区中...

网友评论

      本文标题:Socket粘包处理

      本文链接:https://www.haomeiwen.com/subject/wsaanftx.html