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