Fork me on GitHub

exbuffer.c——纯C写的TCP中的粘包、分包问题的解决方案

原创文章,未经允许,请勿转载

设计目标是一个纯C的网络协议缓冲器,该协议简单介绍:

协议包分为包头和包体:包长采用2个字节或者4个字节,用来表示本次数据包中包体的长度

接受到数据就存储在缓冲区,缓冲区动态扩展以保证可以足够存储。

当接收到一个以上完整的数据包就调用回调函数recvHandle。

项目托管页面:https://github.com/play175/exbuffer.c

另外有nodejs版本的exbuffer:https://github.com/play175/ExBuffer

对C不熟悉,第一次写C代码,可能很多不合理的地方,欢迎批评指正!

附使用代码:

#include "exbuffer.c" 

void recvHandle(unsigned char *rbuf,size_t len) 
{ 
    printf("收到数据:%d\n",len); 
    exbuffer_printHex(rbuf,len); 
} 

int main(int argc, char **argv) 
{ 
    exbuffer_t* value; 
    value = exbuffer_new(); 
    value->recvHandle = recvHandle; 

    unsigned char buf[] = {0,2,3,4,0,1,5,0}; 
    exbuffer_put(value,(unsigned char*)buf,0,8); 

    unsigned char buf2[] = {3}; 
    exbuffer_put(value,(unsigned char*)buf2,0,1); 

    unsigned char buf3[] = {6,6,6}; 
    exbuffer_put(value,(unsigned char*)buf3,0,3); 

    //printf("有效数据长度:%d\n",exbuffer_getLen(value)); 
    //printf("缓冲区长度:%d\n",value->bufferlen); 
    printf("缓冲区:\n"); 
    exbuffer_dump(value); 
    exbuffer_free(&value); 

    //getchar(); 
    return EXIT_SUCCESS; 
}

来源:悠游悠游,原文地址:https://yymmss.com/p/exbuffer_c.html