如何有效控制c++socket发送和接收数据长度

开始c++ 创建socket编程时候,总是定一个足够大的数组来接收数据,从效率上讲是不科学的,如果能控制发多少接收多少是理想状态,下面例子说明:

bool CMySocket::Send(const char *pSMsg, int len)
{

    char* sendBuff = new char[len + 4];//申请发送数组,+4是要发送长度所占的字节数
    byte lenBuff[4] = { 0 };//长度数组并初始化
    int2bytes(len, lenBuff, 4);
    memcpy(sendBuff, lenBuff, 4);
    memcpy(sendBuff + 4, pSMsg, len);

    int nRel = send(m_Socket, sendBuff, len + 4, 0);

    delete[]sendBuff;
    sendBuff = NULL;

    if (nRel == SOCKET_ERROR)
    {
        return false;        
    }    
    return true;
}

//下面是接收代码

byte headBuf[4];//定义字节数组,读取发送过来的总长度
            nRel = recv(pSocket->m_Socket, (char*)headBuf, 4, 0); //获取总长度           
            if (nRel > 0)
            {
                int nLen = bytes2int(headBuf, 4);           

                char* msgBuf = new char[nLen];
                nRel = recv(pSocket->m_Socket, msgBuf, nLen, 0);//获取实际数据
                if (nRel > 0)
                {
                    CDataCenter::ToDataCenter(pSocket, msgBuf);    //处理数据             
                }

            }            

希望以上代码对大家有帮助,尤其是新手,可以参考。不懂的欢迎联系。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值