TCP套接字通信核心要点
TCP套接字通信核心要点
通信模型架构
客户端-服务端模型
- CS架构:客户端发起请求,服务端响应和处理请求
- 双向通道:建立连接后实现全双工通信
服务端搭建流程
核心步骤
-
创建套接字
int server = socket(AF_INET, SOCK_STREAM, 0);
- 参数说明:
AF_INET
(IPv4)、SOCK_STREAM
(TCP)、协议自动选择
- 参数说明:
-
绑定地址
struct sockaddr_in addr = {.sin_family = AF_INET,.sin_port = htons(port),.sin_addr.s_addr = INADDR_ANY }; bind(server, (struct sockaddr*)&addr, sizeof(addr));
- 关键操作:字节序转换(
htons
)、IP绑定策略(INADDR_ANY
)
- 关键操作:字节序转换(
-
监听连接
listen(server, 10); // 监听队列长度=10
-
接受连接
int client = accept(server, (struct sockaddr*)&client_addr, &client_len);
- 获取客户端地址:
inet_ntop
转换IP,ntohs
转换端口
- 获取客户端地址:
-
数据交互
- 读取数据:
read()
或recv()
- 终止条件:返回值为0时表示客户端断开
- 读取数据:
客户端搭建流程
核心步骤
-
创建套接字
int client = socket(AF_INET, SOCK_STREAM, 0);
-
设置服务端地址
struct sockaddr_in addr = {.sin_family = AF_INET,.sin_port = htons(server_port),.sin_addr.s_addr = inet_addr("192.168.1.1") };
-
建立连接
connect(client, (struct sockaddr*)&addr, sizeof(addr));
-
发送数据
write(client, buffer, sizeof(buffer));
协议包设计
结构体定义
typedef struct Pack {int packsize; // 总字节数(含包头)char buf[4096]; // 数据缓冲区int used; // 已使用字节数
} pack_t;
关键操作
-
数据封装
void append(pack_t* pack, const char* str) {short len = strlen(str);*(short*)(pack->buf + pack->used) = len; // 写入长度memcpy(pack->buf + pack->used + 2, str, len); // 写入内容pack->used += (len + 2);pack->packsize = 4 + pack->used; // 更新总大小(含4字节包头) }
-
数据解析
char** analysis(pack_t* pack) {char* buf = pack->buf;char** list = calloc(20, 8); // 存储解析后的字段int readed_size = 0;while (*(short*)(buf + readed_size) != 0) {short len = *(short*)(buf + readed_size);readed_size += 2;memcpy(temp, buf + readed_size, len);list[i++] = strdup(temp); // 动态分配存储}return list; }
关键问题处理
粘包与拆包
- 粘包:多次发送的小数据包合并传输
- 拆包:大数据包拆分发送(如超过1500字节限制)
- 解决方案:协议包头声明数据长度,接收方按长度解析
连接管理
- 服务端维护:通过
accept()
返回的客户端描述符管理多个连接 - 异常断开检测:
read()
返回0时表示客户端主动关闭
代码实践要点
- 错误处理:检查
socket()/bind()/listen()/connect()
的返回值 - 资源释放:
close()
关闭套接字,free()
释放动态内存 - 字节序转换:端口号使用
htons/ntohs
,IP使用inet_ntop/pton
总结:TCP套接字通信围绕地址绑定、连接管理、协议设计展开,需掌握服务端/客户端搭建流程、粘包处理及协议包解析方法,结合错误处理实现稳定通信。
相关文章:

TCP套接字通信核心要点
TCP套接字通信核心要点 通信模型架构 客户端-服务端模型 CS架构:客户端发起请求,服务端响应和处理请求双向通道:建立连接后实现全双工通信 服务端搭建流程 核心步骤 创建套接字 int server socket(AF_INET, SOCK_STREAM, 0); 参数说明&am…...

【C】初阶数据结构15 -- 计数排序与稳定性分析
本文主要讲解七大排序算法之外的另一种排序算法 -- 计数排序 目录 1 计数排序 1) 算法思想 2) 代码 3) 时间复杂度与空间复杂度分析 (1) 时间复杂度 (2) 空间复杂度 4) 计…...

高性能Python Web 框架--FastAPI 学习「基础 → 进阶 → 生产级」
以下是针对 FastAPI 的保姆级教程,包含核心概念、完整案例和关键注意事项,采用「基础 → 进阶 → 生产级」的三阶段教学法: 一、FastAPI介绍 FastAPI 是一个现代化的、高性能的 Python Web 框架,专门用于构建 APIs(应…...

Qt QML自定义LIstView
QML ListView组合拳做列表,代码不可直接复制使用,需要小改 先上图看效果 样式1 样式2 样式3 原理:操作:技术点:代码片段: 先上图看效果 样式1 三个表格组合成要给,上下滚动时,三个同时滚动&am…...

C++进阶--红黑树的实现
文章目录 红黑树的实现红黑树的概念红黑树的规则红黑树的效率 红黑树的实现红黑树的结构红黑树的插入变色单旋(变色)双旋(变色) 红黑树的查找红黑树的验证 总结:结语 很高兴和大家见面,给生活加点impetus&a…...

WPF之值转换器
文章目录 目录什么是值转换器IValueConverter接口Convert方法ConvertBack方法 创建和使用值转换器定义转换器类在XAML中使用转换器转换器参数(ConverterParameter) 常用转换器实现布尔值转可见性(BoolToVisibilityConverter)数值转…...
黄金、碳排放期货市场API接口文档
StockTV 提供了多种期货市场的数据接口,包括获取K线图表数据、查询特定期货的实时行情等。以下为对接期货市场的详细接口说明。 一、获取K线图表数据 通过调用/futures/kline接口,您可以获取指定期货合约的历史K线数据(例如开盘价、最高价、…...
云上系统CC攻击如何进行检测与防御?
云上系统遭受CC攻击(Challenge Collapsar,一种针对应用层的DDoS攻击)时,检测与防御需结合流量分析、行为识别和技术手段,以下是核心方法: 一、检测方法 异常流量分析 监控请求量突增&#…...

qml中的TextArea使用QSyntaxHighlighter显示高亮语法
效果图,左侧显示行号,右侧用TextArea显示文本内容,并且语法高亮。 2025年5月8号更新 1、多行文本注释 多行文本注释跟普通的高亮规则代码不太一样,代码需要修改,这里以JavaScript举例。 先制定多行文本注释规则&…...
QuecPython+腾讯云:快速连接腾讯云l0T平台
该模块提供腾讯 IoT 平台物联网套件客户端功能,目前的产品节点类型仅支持“设备”,设备认证方式支持“一机一密”和“动态注册认证”。 BC25PA系列不支持该功能。 初始化腾讯 IoT 平台 TXyun TXyun(productID, devicename, devicePsk, ProductSecret)配置腾讯 IoT…...
RocketMQ 深度解析:架构设计与最佳实践
在分布式系统架构日益复杂的今天,消息中间件作为系统间通信的桥梁,扮演着至关重要的角色。RocketMQ 作为阿里开源的高性能分布式消息中间件,凭借其卓越的性能、丰富的功能以及高可用性,在电商、金融、互联网等众多领域得到广泛应用…...

Transformer编码器+SHAP分析,模型可解释创新表达!
目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 基本介绍 基于SHAP分析的特征选择和贡献度计算,Matlab2023b代码实现;基于MATLAB的SHAP可解释Transformer编码器回归模型,敏感性分析方法。 详细介绍 引言 在正向渗透(…...

[特殊字符]适合母亲节的SVG模版[特殊字符]
宝藏模版 往期推荐(点击阅读): 趣味效果|高大上|可爱风|年终总结I|年终总结II|循环特效|情人节I|情人节II|情人节IIII|妇女节I&…...

浅蓝色调风格人像自拍Lr调色预设,手机滤镜PS+Lightroom预设下载!
调色教程 浅蓝色调风格人像自拍 Lr 调色是利用 Adobe Lightroom 软件针对人像自拍照进行后期处理的一种调色方式。它通过对照片的色彩、对比度、亮度等参数进行精细调整,将画面的主色调打造为清新、柔和的浅蓝色系,赋予人像自拍独特的清新、文艺风格&…...

isp流程介绍(yuv格式阶段)
一、前言介绍 前面两章里面,已经分别讲解了在Raw和Rgb域里面,ISP的相关算法流程,从前面文章里面可以看到,在Raw和Rgb域里面,很多ISP算法操作,更像是属于sensor矫正或者说sensor标定操作。本质上来说&#x…...

数巅智能携手北京昇腾创新中心深耕行业大模型应用
当前,AI技术正在加速向各行业深度渗透,成为驱动产业转型和社会经济发展的重要引擎。构建开放协作的AI应用生态体系、推动技术和应用深度融合,已成为行业发展的重要趋势。 近日,数巅智能与北京昇腾人工智能计算中心(北京昇腾创新中…...

【LangChain高级系列】LangGraph第一课
前言 我们今天直接通过一个langgraph的基础案例,来深入探索langgraph的核心概念和工作原理。 基本认识 LangGraph是一个用于构建具有LLMs的有状态、多角色应用程序的库,用于创建代理和多代理工作流。与其他LLM框架相比,它提供了以下核心优…...
增强学习(Reinforcement Learning)简介
增强学习(Reinforcement Learning)简介 增强学习是机器学习的一种范式,其核心目标是让智能体(Agent)通过与环境的交互,基于试错机制和延迟奖励反馈,学习如何选择最优动作以最大化长期累积回报。…...

常见降维算法分析
一、常见的降维算法 LDA线性判别PCA主成分分析t-sne降维 二、降维算法原理 2.1 LDA 线性判别 原理 :LDA(Linear Discriminant Analysis)线性判别分析是一种有监督的降维方法。它的目标是找到一个投影方向,使得不同类别的数据在…...

计算机二级(C语言)已过
非线性结构:树、图 链表和队列的结构特性不一样,链表可以在任何位置插入、删除,而队列只能在队尾入队、队头出队 对长度为n的线性表排序、在最坏情况下时间复杂度,二分查找为O(log2n),顺序查找为O(n),哈希查…...

2025年3月,韩先超对国网宁夏进行Python线下培训
大家好,我是韩先超!在2025年3月3号和4号,为 宁夏国网 的运维团队进行了一场两天的 Python培训 ,培训目标不仅是让大家学会Python编程,更是希望大家能够通过这门技术解决实际工作中的问题,提升工作效率。 对…...
ATH12K驱动框架架构图
ATH12K驱动框架架构图 ATH12K驱动框架架构图(分层描述)I. 顶层架构II. 核心数据结构层次关系III. 主要模块详解1. 核心模块 (Core)2. 硬件抽象层 (HAL)3. 无线管理接口 (WMI)4. 主机目标通信 (HTC)5. 复制引擎 (CE)6. MAC层7. 数据路径 (DP)IV. 关键数据流路径1. 发送数据流 …...
pcb样板打样厂家哪家好?
国内在PCB样板加工领域具有较强竞争力的企业主要包括以下几家,综合技术实力、市场份额、客户评价及行业认可度进行推荐: 1. 兴森科技 行业地位:国内最大的PCB样板生产商,细分领域龙头企业,月订单品种数可达25,000种&…...

[计算机网络]物理层
文章目录 物理层的概述与功能传输介质双绞线:分类:应用领域: 同轴电缆:分类: 光纤:分类: 无线传输介质:无线电波微波:红外线:激光: 物理层设备中继器(Repeater):放大器:集线器(Hub)&…...

幂等操作及处理措施
利用token模式去避免幂等操作 按以上图所示,除了token,应该也可以把传入的参数用MD5加密,当成key放入redis里面,业务执行完后再删除这个key.如还没有执行完,则请不要重复操作。纯属个人理解...

Matlab 数控车床进给系统的建模与仿真
1、内容简介 Matlab217-数控车床进给系统的建模与仿真 可以交流、咨询、答疑 2、内容说明 略 摘 要:为提高数控车床的加工精度,对数控 车床进给系统中影响加工精度的主要因素进行了仿真分析研 动系统的数学模型,利用MATLAB软件中的动态仿真工具 究:依据机械动力学原理建立了…...

低成本自动化改造的18个技术锚点深度解析
执行摘要 本文旨在深入剖析四项关键的低成本自动化技术,这些技术为工业转型提供了显著的运营和经济效益。文章将提供实用且深入的指导,涵盖老旧设备联网、AGV车队优化、空压机系统智能能耗管控以及此类项目投资回报率(ROI)的严谨…...
【大数据】服务器上部署Apache Paimon
1. 环境准备 在开始部署之前,请确保服务器满足以下基本要求: 操作系统: 推荐使用 Linux(如 Ubuntu、CentOS)。 Java 环境: Paimon 依赖 Java,推荐安装 JDK 8 或更高版本。 Flink 环境: Paimon 是基于 Apache Flink 的…...

我国脑机接口市场规模将破38亿元,医疗领域成关键突破口
当人类仅凭"意念"就能操控无人机编队飞行,当瘫痪患者通过"脑控"重新站立行走,这些曾只存在于科幻电影的场景,如今正通过脑机接口技术变为现实。作为"十四五"规划中重点发展的前沿科技,我国脑机接口…...

Edu教育邮箱申请成功下号
这里是第2部分 如你所见,我根本就没有考虑流量的问题, 如果你有幸看到前面的内容,相信你能自己找到这个后续。...