【TCP】TCP 分包拆包代码

https://blog.csdn.net/xufengyongyou/article/details/45305947

void SockBox::AddBox(const char *data, const size_t size)
{
    if (data)
    {
        m_data.SetDataSize(m_sizeBuf + size);
        memcpy(m_data.GetData() + m_sizeBuf, data, size);
        m_sizeBuf += size;
    }

    if (m_sizeBuf <= sizeof(m_size))
        //包大小 未读全,待新包到达
        return;

    /*包大小获取*/
    if (!m_size)
    {
        m_sizeBuf -= sizeof(m_size);
        memcpy(&m_size, m_data.GetData(), sizeof(m_size));
        memmove( m_data.GetData(),
                 m_data.GetData() + sizeof(m_size),
                 m_sizeBuf);
    }
    /*end 包大小获取*/
    if (m_sizeBuf < m_size)
        //半包 包未读全,待新包到达
        return;

    /*粘包处理*/
    if (m_host->GetCallBack())
        m_host->GetCallBack()(m_data.GetData(), m_size, this);

    m_sizeBuf -= m_size;

    if (m_sizeBuf)
    {
        memmove(m_data.GetData(),
                m_data.GetData() + m_size,
                m_sizeBuf);
    }


    m_size = 0;
    //递归处理粘包
    AddBox(nullptr, 0);
    /*end 粘包处理*/
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值