解决:cocos2dx ccsoket不能读满buffer和会读到下一个包得内容

在接受的一个游戏中,他们使用了ccsocket,但是有两个基本问题:第一个是无法保证每次的数据包都readfull(每次读完),第二个就是,有些功能服务器会连续发给客户端若干个数据包,客户端在读取第一个包得时候,就有可能读到下一个包的内容,这两个问题的解决办法我是这样写的:

/*

先读取包头,在读包长度

*/

void* SocketClient::recData(void *pthread)

{

for(;;)

{

    try{

        char bufHead;

        memset(bufHead, 0, PACKET_HEAD_LEN);

        char* pBufHead = (char*)bufHead;

        readFull(PACKET_HEAD_LEN, &pBufHead);

        short packetLen = SocketReader::readShort(&pBufHead);



        char bufPacket;

        memset(bufPacket, 0, packetLen);

        char* pBufPacket = (char*)bufPacket;

        readFull(packetLen, &pBufPacket);



        short packetType = SocketReader::readShort(&pBufPacket);

        printf("本包类型:%d \n", packetType);

        Api::GetInstance()->funcByCode(packetType)(&pBufPacket);

    }catch(...)

    {

        MessageTips::getSingleton()->popMessage(0,1001);

        clearSocket();

printf(“接受数据错误-----> \n\n”);

        break;

    }

}

}

/*

这个函数保证会读满m个字节到dest buffer中

*/

void SocketClient::strmcat(char *dest, const char *str, int m)

{

char* tmpDest = dest;

for(int i=0; i< m; ++i)

{

    tmpDest = str*;*

}

offset += m;

tmpDest = '\0';

}

有什么不正确地地方大家请指出来哈。