尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
recvfrom代码块分析
recvfrom-CSDN博客看一段代码:void UdpFuc::slot_start() { char pBuf[1500]; int ret 0; memset((char *)pBuf, \0, 1500); int sockAddrSize sizeof (struct sockaddr_in); while(1) { ret recvfrom(m_recvSocket, (char*)pBuf, sizeof(pBuf), 0, (struct sockaddr *)m_recvSockAddr, (socklen_t*)sockAddrSize); // 处理代码 if(ret0) { QByteArray bdp((const char*)pBuf, ret); emit sign_bdp(bdp); } } }char pBuf[1500];memset((char *)pBuf, \0, 1500);可以直接写sizeof(pBuf)吗数组场景下sizeof是编译期常量pBuf是数组不是指针sizeof(pBuf)在编译期就等于 1500没有运行时开销。编译器直接生成常量。ret recvfrom(m_recvSocket, (char*)pBuf, sizeof(pBuf), 0, (struct sockaddr *)m_recvSockAddr, (socklen_t*)sockAddrSize);m_recvSocket : 套接字文件描述符pBuf : 接收数据的缓冲区sizeof(pBuf)缓冲区大小0 : 接收标志m_recvSockAddr : 输出参数存放发送方的地址信息参数方向含义src_addr纯输出内核把发送方地址写进这块内存addrlen输入 输出传入src_addr缓冲区有多大返回内核实际写了多少字节src_addr缓冲区是什么src_addr不是内核分配的一块内存给你而是你调用者自己准备一块内存把地址传给内核让内核往里填数据。看这段代码struct sockaddr_in cliAddr; // ← ① 这就是缓冲区 socklen_t addrLen sizeof(cliAddr); // ← ② 缓冲区大小 recvfrom(sockfd, buf, len, 0, (struct sockaddr *)cliAddr, // ← ③ 把缓冲区地址传给内核 addrLen);三个概念对应概念在这段代码里说明缓冲区cliAddr这个变量本身一块16 字节的栈内存IPv4指针cliAddr强转成(struct sockaddr *)告诉内核往这块内存写缓冲区大小addrLen sizeof(cliAddr)告诉内核最多写 16 字节内核做的事把发送方的IP 端口写进cliAddr指向的那 16 字节里。你做的事调用结束后从cliAddr.sin_addr/cliAddr.sin_port读出来。为什么地址长度要用指针因为内核写完还要告诉你实际写了多少IPv4 是 16IPv6 是 28所以需要回传。回到上面的程序问题 sockAddrSize位置错误int sockAddrSize sizeof(struct sockaddr_in); // 放在 while 外面 ... ret recvfrom(..., (socklen_t*)sockAddrSize);sockAddrSize是一个输入输出参数调用前告诉内核m_recvSockAddr缓冲区大小调用后内核写回实际地址长度问题每次recvfrom都会修改它。虽然对 IPv4 来说通常仍是 16 字节但这是个规范用法错误应该每次循环重置while (1) { socklen_t sockAddrSize sizeof(m_recvSockAddr); // 每次重置 ret recvfrom(..., (struct sockaddr *)m_recvSockAddr, sockAddrSize); ... }另外int转socklen_t*的强制转换也不规范直接声明为socklen_t更好。
RELATED

相关推荐

2026最新5款Copilot平替工具免费深度对比

2026最新5款Copilot平替工具免费深度对比

我有个不太主流的对比维度:AI 编程工具生成的代码好不好读。有些工具写出来的代码只有机器能理解,人接手维护的时候想砸键盘。过去三个月,因为团队预算砍掉了 GitHub Copilot 的订阅,我被迫把市面上 5 款平替方案挨个试了一遍——…

📅 2026/10/11 1:40:07
具身智能中的协同机理研究(61):TVA-World三策破解运动控制延迟难题

具身智能中的协同机理研究(61):TVA-World三策破解运动控制延迟难题

前沿技术探索:TVA智能体(简称TVA) TVA智能体(亦称“AI智能体视觉”)是依托Transformer架构与“因式智能体”理论构建的新型工业视觉系统,也是当前最具代表性的具身视觉技术之一。它有机融合深度强化学习(DRL)、卷积神经网络(CNN)与因式分解算法(FRA),构成了具身智…

📅 2026/10/11 1:35:06
具身智能中的协同机理研究(64):TVA-World架构物理交互三大核心优势

具身智能中的协同机理研究(64):TVA-World架构物理交互三大核心优势

前沿技术探索:TVA智能体(简称TVA) TVA智能体(亦称“AI智能体视觉”)是依托Transformer架构与“因式智能体”理论构建的新型工业视觉系统,也是当前最具代表性的具身视觉技术之一。它有机融合深度强化学习&a…

📅 2026/10/11 1:35:06
MORE NEWS

更多资讯

📰

AI视频生成异步任务管理:查询API与轮询策略实战

半夜两点,手机连着震了十几下。我揉着眼睛爬起来看了一眼监控群,某公司那边部署的 AI 视频批量生成任务,跑了三个小时,回调通知愣是一条没收到。后台任务队列里挂着两百多个视频任务,全部卡在"处理中"状态。…

📰

论文写作前的资料整理怎么做:按素材分类与提纲对应的四条判据

动笔前先把资料整理成「能直接挂到提纲上」的状态,往往比再多攒几十篇文献更省时间。据公开的写作指导与用户反馈,卡壳多发生在材料与章节对不上,而不是材料不够。下面给出四条可以逐项打勾的整理判据,并把知学术AIPaperGPT 里能先…

📰

OM1到OM5多模光纤全解读:选型、距离与现场施工避坑指南

做综合布线和数据中心项目这些年,OM1到OM5这几个字母几乎每次都会出现在清单上。不少人把多模光纤当成一种“按颜色区分的线”——蓝色跳线是单模,橙色或绿色的是多模——但真到选型、光模块匹配、测试验收的时候,才发现OM等级直接决定了你能…

📰

Word文档防修改完整指南:从只读到密码加密的实用方案

一份改了三天的方案,发到项目群里让大家提意见,隔天再打开,段落格式全乱,批注把正文盖得密密麻麻。这种场景做办公的应该都不陌生。Word文档在流转过程中,最大的痛点不是内容写得不好,而是总有人在你没准备…

📰

蛋白表达标签怎么选?His、GST、MBP、SUMO与Tag-free无标签策略技术对比

重组蛋白表达中,融合标签的选择直接决定纯化效率、产物溶解度与最终蛋白的构象真实性。 His、GST、MBP、SUMO、Strep-tag II各有明确的技术定位,而Tag-free策略——即最终产物不含任何工程化标签——在结构生物学与功能研究中具有不可替代的位置。一、常…

📰

数据可视化高颜值秘籍:22个布局与配色高阶技巧详解

起步之前,先聊聊“高颜值”这回事做了多年数据可视化项目,我见过太多“功能齐全但惨不忍睹”的看板:图表挤成一团、颜色像打翻了的调色盘、信息层级一塌糊涂。说实话,这类作品的问题通常不在数据,也不在工具&#xff0…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬