当前位置: 首页 > wzjs >正文

网站建设易网拓做百度手机网站关键词

网站建设易网拓,做百度手机网站关键词,分析不同网站的优缺点,广州番禺景点在基于 libevent 的 TCP 服务器开发中,处理消息边界是常见需求。以下是两种主流分包方案的完整实现: 一、基于 Content-Length 的分包方案 1.1 数据结构设计 typedef struct {struct bufferevent *bev;int content_length; // 当前消息的预期长度int received_bytes; //…

在基于 libevent 的 TCP 服务器开发中,处理消息边界是常见需求。以下是两种主流分包方案的完整实现:

一、基于 Content-Length 的分包方案

1.1 数据结构设计

typedef struct {struct bufferevent *bev;int content_length;  // 当前消息的预期长度int received_bytes;  // 已接收字节数char *buffer;        // 消息缓冲区size_t buffer_size;  // 缓冲区大小
} tcp_session_t;

1.2 核心处理逻辑

void read_cb(struct bufferevent *bev, void *arg) {tcp_session_t *session = (tcp_session_t *)arg;struct evbuffer *input = bufferevent_get_input(bev);// 阶段1:读取消息头if (session->content_length == -1) {char *line = evbuffer_readln(input, NULL, EVBUFFER_EOL_CRLF);if (!line) return;  // 不完整的行// 解析Content-Lengthif (strstr(line, "Content-Length:") != NULL) {sscanf(line, "Content-Length: %d", &session->content_length);session->buffer = malloc(session->content_length + 1);}free(line);// 检查是否到达头部结束(空行)line = evbuffer_readln(input, NULL, EVBUFFER_EOL_CRLF);if (line && strlen(line) == 0) {free(line);if (session->content_length == -1) {// 没有Content-Length的简单消息session->content_length = evbuffer_get_length(input);}} else {return;  // 继续等待头部结束}}// 阶段2:读取消息体size_t avail = evbuffer_get_length(input);size_t need = session->content_length - session->received_bytes;size_t to_read = avail < need ? avail : need;evbuffer_remove(input, session->buffer + session->received_bytes, to_read);session->received_bytes += to_read;// 阶段3:完整消息处理if (session->received_bytes == session->content_length) {session->buffer[session->content_length] = '\0';process_complete_message(session->buffer);// 重置状态free(session->buffer);session->buffer = NULL;session->content_length = -1;session->received_bytes = 0;}
}

二、基于双 CRLF 的分包方案

2.1 数据结构设计

typedef struct {struct bufferevent *bev;int header_complete;  // 头部是否解析完成char *header;         // 消息头缓冲区char *body;           // 消息体缓冲区size_t body_len;      // 消息体长度
} tcp_session_t;

2.2 核心处理逻辑

void read_cb(struct bufferevent *bev, void *arg) {tcp_session_t *session = (tcp_session_t *)arg;struct evbuffer *input = bufferevent_get_input(bev);// 阶段1:解析消息头if (!session->header_complete) {char *line = evbuffer_readln(input, NULL, EVBUFFER_EOL_CRLF);if (!line) return;if (session->header == NULL) {session->header = malloc(1024);session->header[0] = '\0';}// 空行表示头部结束if (strlen(line) == 0) {session->header_complete = 1;free(line);// 检查是否有消息体(如POST请求)const char *content_len = strstr(session->header, "Content-Length:");if (content_len) {sscanf(content_len, "Content-Length: %zu", &session->body_len);session->body 
http://www.dtcms.com/wzjs/573740.html

相关文章:

  • 链接网站怎么做怎么做自己的充值网站
  • 做音乐网站没有版权淘宝客手机网站开发
  • 免费网站开发平台之梦做的网站后台修改栏目描述
  • 手机端怎么打开响应式的网站英雄联盟网页设计代码
  • 网站建设注意那上海注册公司官网
  • 开鲁网站seo转接wordpress 网站地图
  • 宜兴做网站商务网站规划与建设
  • 电子政务门户网站建设的意义网站开发软件英文版
  • 做网站su软件如何制作个人网页兼职
  • 做的好的大学生旅行有哪些网站好wordpress下载按钮
  • 商务网站价格宏润建设集团有限公司网站
  • 天河网站建设多少钱如何评价企业网站推广效果?
  • 国内知名的网站建设企业做招聘求职网站
  • 做雕塑网站四川林峰脉建设工程有限公司网站
  • 用淘宝做公司网站沭阳找做网站合伙
  • 福州公司建设网站百度广告服务商
  • 一家做特卖的网站黄冈网站优化公司哪家好
  • 网络营销理论主要包括成都做seo网站公司
  • 网站平台建设实训总结下wordpress
  • 个人做外贸的网站有哪些推广软件哪个好
  • 民政 门户网站 建设网站建设课
  • 包头建站企业网站开发综合实训
  • 企业网站免费模板租用空间做网站
  • wordpress主题 自定义字段wordpress seo优化插件
  • 营销型网站建设好不好保健品手机网站模板
  • 查找网站建设历史记录作文网高中
  • 大型购物网站建设费用台州网站制作网页
  • 长春网站建设产品展示竞价sem培训
  • 网站内侧网编必应搜索引擎网址
  • 嘉兴建设规划网站wordpress4.3.1下载