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

网上做调查网站有哪些大数据比较好的培训机构

网上做调查网站有哪些,大数据比较好的培训机构,中国网通做网站,广告宣传语一、粘包问题详解 1. 粘包的概念 定义: 指在 TCP 通信中,由于发送方和接收方的读写速度、数据量不一致,导致多个数据包被错误地合并成一个数据包处理的现象。产生原因: TCP 是流式协议(无边界)&#xff0…

一、粘包问题详解

1. 粘包的概念
  • 定义
    指在 TCP 通信中,由于发送方和接收方的读写速度、数据量不一致,导致多个数据包被错误地合并成一个数据包处理的现象。
  • 产生原因
    • TCP 是流式协议(无边界),数据以字节流形式传输,内核缓冲区可能累积多包数据。
    • 发送方连续发送多个小数据包,接收方未及时读取,导致数据在缓冲区中粘连。
  • 关键区别
    UDP 是数据报协议(有边界),每个recvfrom返回一个完整数据报,不会出现粘包
2. 解决方法:封包与拆包
  • 核心思想:在应用层为数据添加长度字段,明确数据包边界。
    1. 封包(发送方)
      将数据分为 “长度字段 + 数据内容” 两部分,长度字段通常占 4 字节(uint32_t),存储数据内容的字节数。
    2. 拆包(接收方)
      先读取长度字段,再根据长度读取对应字节数的数据内容。
  • 实现步骤
    1. 发送方将数据长度转换为网络字节序htonl),与数据一同发送。
    2. 接收方先读取 4 字节长度字段(ntohl转换为本地字节序),再循环读取指定长度的数据。

二、粘包处理代码示例(TCP)

1. 服务器端(拆包逻辑)

c

#include "head.h"int main(int argc, const char *argv[]) {// 1. 创建套接字int sfd = socket(AF_INET, SOCK_STREAM, 0);if (sfd == -1) PRINTF_ERROR("socket error");// 2. 绑定端口struct sockaddr_in addr = {.sin_family = AF_INET,.sin_port = htons(8888),.sin_addr.s_addr = INADDR_ANY};if (bind(sfd, (struct sockaddr*)&addr, sizeof(addr)) == -1)PRINTF_ERROR("bind error");// 3. 监听连接if (listen(sfd, 5) == -1) PRINTF_ERROR("listen error");// 4. 接受客户端连接struct sockaddr_in cliaddr;socklen_t cli_len = sizeof(cliaddr);int fd = accept(sfd, (struct sockaddr*)&cliaddr, &cli_len);if (fd == -1) PRINTF_ERROR("accept error");// 5. 接收数据(拆包逻辑)char buf[1024] = {0};while (1) {// 先接收4字节长度字段int ret = recv(fd, buf, 4, 0);if (ret <= 0) {printf("客户端关闭\n");break;}int data_len = ntohl(*(unsigned int*)buf); // 转换为本地字节序printf("接收数据长度: %d\n", data_len);// 再接收指定长度的数据内容int count = 0;while (count < data_len) {ret = recv(fd, buf + count, data_len - count, 0);if (ret <= 0) {PRINTF_ERROR("recv error");break;}count += ret;}if (count == data_len) {printf("数据接收完毕: [%s]\n", buf);memset(buf, 0, sizeof(buf)); // 清空缓冲区}}close(fd);close(sfd);return 0;
}
2. 客户端(封包逻辑)

c

#include "head.h"int main(int argc, const char *argv[]) {// 1. 创建套接字int sfd = socket(AF_INET, SOCK_STREAM, 0);if (sfd == -1) PRINTF_ERROR("socket error");// 2. 连接服务器struct sockaddr_in addr = {.sin_family = AF_INET,.sin_port = htons(8888),.sin_addr.s_addr = inet_addr("0.0.0.0")};if (connect(sfd, (struct sockaddr*)&addr, sizeof(addr)) == -1)PRINTF_ERROR("connect error");// 3. 模拟发送文件数据(粘包演示)char *msg = (char*)malloc(1024);int file_fd = open("./66.txt", O_RDONLY);if (file_fd == -1) PRINTF_ERROR("open error");while (1) {char buf[128] = {0};int size = read(file_fd, buf, rand() % 30); // 随机读取1-30字节if (size <= 0) {printf("文件读取完成\n");break;}// 封包:4字节长度 + 数据内容*((unsigned int*)msg) = htonl(size); // 存储长度(网络字节序)memcpy(msg + 4, buf, size); // 复制数据内容// 发送封包int count = 0;while (count < size + 4) {ret = send(sfd, msg + count, size + 4 - count, 0);if (ret == -1) PRINTF_ERROR("send error");count += ret;}printf("发送数据长度: %d | 内容: [%s]\n", size, buf);sleep(1); // 模拟发送间隔}free(msg);close(sfd);return 0;
}

三、关键技术点

1. 字节序转换
  • 问题:不同主机可能采用不同字节序(大端 / 小端),需通过htonl/ntohl统一为网络字节序(大端)。

    c

    uint32_t len = htonl(data_length); // 主机字节序 → 网络字节序(发送方)
    uint32_t len = ntohl(*(uint32_t*)buf); // 网络字节序 → 主机字节序(接收方)
    
2. 循环读写
  • 原因recv/send可能无法一次性读写完整数据,需循环处理直到完成指定长度。

    c

    // 接收循环
    int count = 0;
    while (count < data_len) {ret = recv(fd, buf + count, data_len - count, 0);count += ret;
    }// 发送循环
    int count = 0;
    while (count < total_len) {ret = send(sfd, buf + count, total_len - count, 0);count += ret;
    }
    
3. UDP 无粘包特性
  • 原理:UDP 以数据报为单位传输,每个recvfrom返回一个完整数据包,天然支持边界划分。

    c

    // UDP接收(无需处理粘包)
    struct sockaddr_in cliaddr;
    socklen_t cli_len = sizeof(cliaddr);
    int n = recvfrom(udp_fd, buf, sizeof(buf), 0, &cliaddr, &cli_len);
    

四、总结

特性TCP 粘包UDP 无粘包
协议类型流式协议(无边界)数据报协议(有边界)
问题根源发送 / 接收速度不一致、缓冲区累积每个数据报独立,内核自动维护边界
解决方法应用层封包(长度字段 + 数据)无需处理,直接按数据报接收
典型场景文件传输、消息通信(需自定义协议)实时数据传输(如 DNS、视频流)

注意:TCP 粘包是应用层问题,需通过协议设计解决;UDP 因数据报特性天然避免粘包,但需处理丢包和乱序问题

http://www.dtcms.com/wzjs/27830.html

相关文章:

  • 山东做网站建设的好公司个人网站设计
  • 莱芜雪野湖地图seo刷关键词排名优化
  • 初级买题做哪个网站好论坛推广怎么做
  • 变更网站做推广需要备案石家庄seo代理商
  • 温州做美食网站seo的基本步骤是什么
  • 网站代备十大小说网站排名
  • 做电影网站多少钱东营网站建设
  • 有服务器怎么做网站seo优化培训学校
  • 汨罗做网站价格什么是网络推广
  • 虚拟机如何做网站广告免费发布信息平台
  • 做网站的需求是吗网络优化公司哪家好
  • 哪些网站可以免费做简历网络营销策划方案论文
  • 十堰网站建设专家网站做优化好还是推广好
  • 东莞个人免费建网站网络软文案例
  • 苏州工商注册代办页面优化的方法有哪些
  • 网站开发字体长沙网站优化推广方案
  • jsp动态网站开发考试百度sem推广具体做什么
  • 乐清品牌网站建设湖南seo优化按天付费
  • 哪个基层司法所网站做的比较好推广普通话的意义50字
  • 佛山禅城区网站建设公司网站制作维护
  • 大连网站建设方案广州seo效果
  • 湖北网络建设公司网站南宁seo专员
  • 深圳疫情防控措施徐州百度seo排名
  • 在线crm厂商seo整站怎么优化
  • 专门做特卖的网站百度网址大全网站
  • 广州做地铁的公司网站手游代理平台哪个好
  • 温州专业微网站制作电话市场营销模式有哪些
  • 学校网站制作平台班级优化大师电脑版
  • 邮件服务器是不是网站服务器广告多的网站
  • 网站规划与网页设计案例株洲最新今日头条