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

基于STM32H750XBH6开发板的LwIP socket编程初探

这里写目录标题

  • 1、RAW、NETCONN和socket编程特点
  • 2、基于socket的UDP编程
  • 3、基于socket的TCP编程
    • 3.1、TCP客户端编程
    • 3.2、TCP客户端编程
  • 4、问题记录

1、RAW、NETCONN和socket编程特点

LwIP下三种编程方式分别是RAW API、NETCONN API和Socket API,这三种方式均可以实现常用TCP和UDP通信功能,区别在于开发难度、运行机制和应用场景不同。RAW API是LwIP的原生接口,适用于无操作系统编程场景,这种编程模式占用资源最少、性能最高,但是开发难度最大,适用于追求极致性能的裸机场景。NETCONN API编程必须在RTOS线程里适用,适用于阻塞/非阻塞模型,开发起来比RAW简单多了,是一般ESP32 IDF底层常用方式,但是不能跨平台。Socket API的底层就是封装了NETCONN API,和linux系统下网络编程一样是POSIX标准socket,适用于绝大部分应用层项目。三者之间特点总结如下表:

维度RAWNETCONNsocket
编程模式事件驱动+回调函数顺序执行+半阻塞标准阻塞式
操作系统裸机/RTOSRTOSRTOS
资源占用率
性能极高一般
编程难度最高适中简单

本章在上一章节基于STM32H750XBH6开发板调试FreeRTOS+LwIP程序的基础上实现UDP和TCP通信功能。首先在LWIP → Key Options → LWIP_SOCKET配置中要打开socket,然后注意socket任务的栈空间大小不能太小。为了调试方便,初始化的时候在start任务MX_LWIP_Init();之后创建一个lwip_demo_task,在这个任务中分别调用UDP、TCP client以及TCP server函数与上位机实现通信,后面所列内容都只粘贴主要部分代码,调试时自行修改即可。

2、基于socket的UDP编程

标准的UDP Socket通信功能实现主要有以下四个步骤:
1)创建Socket:使用socket(AF_INET, SOCK_DGRAM, 0) 创建一个数据报类型的套接字。
2)绑定本地地址 (Bind):如果需要固定端口接收数据(作为服务器或监听端),需要使用 bind()将Socket绑定到本机的特定端口上。通常会将IP设置为INADDR_ANY,表示监听本机所有网络接口。
3)发送数据 (Sendto):使用sendto() 函数,指定目标IP和端口进行数据发送。
4)接收数据 (Recvfrom):使用recvfrom() 函数阻塞或非阻塞地等待并接收来自任意客户端的数据。
核心代码如下:

#include"lwip/sockets.h"// LwIP 的 Socket API 头文件// 1. 创建 UDP Socketintsock_fd=socket(AF_INET,SOCK_DGRAM,0);if(sock_fd<0){/* 处理创建失败 */}// 2. 绑定本地端口(以8080为例)structsockaddr_inlocal_addr;memset(&local_addr,0,sizeof(local_addr));local_addr.sin_family=AF_INET;local_addr.sin_port=htons(8080);// 设置本地监听端口local_addr.sin_addr.s_addr=INADDR_ANY;// 绑定本机所有IPif(bind
http://www.cnnetsun.cn/news/2476064.html

相关文章:

  • 收藏!新手程序员必看:LangChain、LangGraph、Deep Agents 框架选型指南
  • 前端开发入门到精通:从零搭建属于自己的网页世界
  • Taotoken 用量看板与账单追溯功能带来的成本管控清晰度
  • LeetCode 堆的插入与删除题解
  • NoFences:3分钟让你的Windows桌面从杂乱到井井有条
  • 3种创意组合:探索Pixelle-Video的插件化视频生成系统
  • 如何高效使用权威SAR舰船检测数据集:SSDD完整实战指南
  • 多市场利润空间收窄之后跨境卖家如何集中团队资源
  • Gomobile踩坑实录:从‘找不到NDK’到成功生成AAR,我总结了这份避坑指南
  • 端侧AI基础设施核心环节与代表企业全景解析
  • 嵌入式工业方案实战:基于瑞萨芯片的可靠性设计、异构计算与交钥匙交付
  • 保姆级教程:在小程序里给ECharts图表加上手指缩放(附地图roam配置)
  • 揭秘OBS智能跟拍:5分钟掌握直播自动对焦革命性技巧
  • PDFMathTranslate:三步实现学术论文完美翻译的终极解决方案
  • Camera Shakify:为Blender动画注入真实相机抖动效果的终极指南
  • 5G工业网关:智慧工厂柔性产线与AI质检的通信基石
  • 告别‘Remount失败’:一篇文章搞懂Android分区验证(Verity)与OverlayFS
  • 输入输出与运算符--人机交互的伊始
  • Altium Designer实战:用xSignals搞定DDR内存等长布线,告别时序烦恼
  • 2026前端开发资源大全:工具、文档、框架、学习路线与实战指南
  • 10分钟搭建Sunshine游戏串流:免费开源的家庭游戏共享方案
  • IPXWrapper终极指南:让经典Windows游戏在现代系统重获联机生命
  • 书匠策AI:你的毕业论文“外挂“到底有多能打?一篇科普让你彻底看懂
  • 智能歌词同步:从音乐听众到歌词大师的macOS进阶指南
  • Linux 下访问 Windows 共享目录的完整指南
  • 乐鑫ESP-Mesh-Lite无线自组网方案:从原理到大规模物联网部署实战
  • 企业级跨平台媒体资源管理:BiliTools架构设计与微服务实践
  • Sora 2原生渲染引擎如何接管DaVinci Resolve时间线?:4步实现AI生成视频无缝调色与剪辑闭环
  • UVM寄存器模型核心API行为全解析:从主值、镜像值到实战避坑指南
  • AI 进入 ERP 后,企业如何管得住?治理、安全与组织变革(AI+ERP系列-10)