【Debug】the remote host closed the connection错误信息分析
- 出现的情况说明:QT软件。刚开始都可以连接成功 之后连接 断开几次 就会出现连接失败 错误信息是the remote host closed the connection。
- the remote host closed the connection广泛原因分析
这个错误通常意味着远端 STM32 服务器主动关闭了连接。可能的原因包括:
- STM32 服务器端代码问题(未正确处理 accept() 或 recv())。
- STM32 端口未真正监听(bind() 或 listen() 失败)。
- STM32 服务器收到连接但立即关闭(可能是 close()、shutdown()、LWIP 资源不足等问题)。
- STM32 服务器崩溃或进入错误状态(导致 Socket 断开)。
- 数据包格式错误(QT 端发送的数据 STM32 解析失败并主动关闭连接)。
- 超时机制(STM32 端等待超时后主动关闭连接)。
- 解决方法
- STM32 端 close() 了连接,说明它检测到了错误或超时,需要检查 recv() 逻辑。
- 在 STM32 代码中,accept() 后不要立即 close(),而是等待客户端数据
- 如果 recv() 返回 0,通常表示客户端关闭了连接,此时 STM32 也会 close(client_fd)
char buffer[256];
int bytes_received = recv(client_fd, buffer, sizeof(buffer), 0);
if (bytes_received == 0) {printf("客户端主动关闭连接\n");close(client_fd);
}
由于一开始前几次都是可以连接成功的,可以缩小原因继续分析。
- 可能的原因
STM32 端的 Socket 没有正确关闭,导致端口资源被占用
每次 accept() 后,如果 close(client_fd); 处理不当,可能会导致连接数耗尽。
STM32 端可能没有正确释放 PCB(Protocol Control Block),导致 LWIP 资源不足。
STM32 端 TCP 连接数受限(LWIP 资源问题)
默认 STM32 LWIP 可用的 TCP 连接数量有限,如果旧的连接没有释放,新连接可能会失败。
MEMP_NUM_TCP_PCB 可能设置过小,导致新连接无法分配资源。
STM32 没有正确处理 recv() 返回 0(客户端主动断开)
正常断开:recv() 返回 0,服务器应该 close(client_fd) 释放资源。
如果没有正确释放,可能导致系统一直保持死连接,新的连接无法建立。 - 解决方法尝试
- 上述解决方法3
- 在 lwipopts.h 中 增加 TCP 连接的数量:✅ 如果 MEMP_NUM_TCP_PCB 太小,STM32 端可能会因为连接数耗尽而拒绝新连接。
#define MEMP_NUM_TCP_PCB 10 // 增加 TCP 连接数
#define MEMP_NUM_TCP_PCB_LISTEN 5 // 允许最大监听连接数
- 关闭 linger 避免 TIME_WAIT
如果 TCP 连接没有正确关闭,可能会进入 TIME_WAIT 状态,导致端口被占用。可以通过 setsockopt() 设置 SO_LINGER 让 STM32 端尽快释放端口:✅ 这样,连接关闭后不会进入 TIME_WAIT 状态,防止端口被占用。
struct linger so_linger;
so_linger.l_onoff = 1; // 打开 linger
so_linger.l_linger = 0; // 立即关闭连接
setsockopt(client_fd, SOL_SOCKET, SO_LINGER, &so_linger, sizeof(so_linger));
- 在 QT 端强制关闭连接
QT 端每次断开连接后,确保完全释放 Socket:避免 QT 端 Socket 资源占用,导致 STM32 端误判连接未释放。
socket->close();
socket->deleteLater();
- 在 PC 端检查 STM32 端口状态
在 PC 上,运行:
netstat -an | grep 8080
#如果看到大量 TIME_WAIT 状态:
tcp 0 0 192.168.1.100:8080 192.168.1.200:50000 TIME_WAIT
#说明STM32 端口没有正确释放,需要用 SO_LINGER 解决。
- Qt 的socket 被设置成了异步,这种 waitForxxxx 函数容易出问题,如果你想知道数据有没有写入,可以连接 bytesWritten 信号。
相关文章:
【Debug】the remote host closed the connection错误信息分析
出现的情况说明:QT软件。刚开始都可以连接成功 之后连接 断开几次 就会出现连接失败 错误信息是the remote host closed the connection。the remote host closed the connection广泛原因分析 这个错误通常意味着远端 STM32 服务器主动关闭了连接。可能的原因包括&a…...

SpringBoot扩展篇:@Scope和@Lazy源码解析
SpringBoot扩展篇:Scope和Lazy源码解析 1. 研究主题及Demo2. 注册BeanDefinition3. 初始化属性3.1 解决依赖注入3.2 创建代理 ContextAnnotationAutowireCandidateResolver#getLazyResolutionProxyIfNecessary3.3 代理拦截处理3.4 单例bean与原型bean创建的区别 4. …...

“AI隐患识别系统,安全多了道“智能护盾”
家人们,在生活和工作里,咱们都知道安全那可是头等大事。不管是走在马路上,还是在工厂车间忙碌,又或是住在高楼大厦里,身边都可能藏着一些安全隐患。以前,发现这些隐患大多靠咱们的眼睛和经验,可…...

通向AGI之路:人工通用智能的技术演进与人类未来
文章目录 引言:当机器开始思考一、AGI的本质定义与技术演进1.1 从专用到通用:智能形态的范式转移1.2 AGI发展路线图二、突破AGI的五大技术路径2.1 神经符号整合(Neuro-Symbolic AI)2.2 世界模型架构(World Models)2.3 具身认知理论(Embodied Cognition)三、AGI安全:价…...

论文阅读:InstanceDiffusion: Instance-level Control for Image Generation
CVPR2024文章 摘要: 文本到图像扩散模型产生高质量的图像,但不提供对图像中单个实例的控制。我们引入了InstanceDiffusion,它将精确的实例级控制添加到文本到图像扩散模型中。InstanceDiffusion 支持每个实例的自由形式的语言条件ÿ…...

7.攻防世界 wzsc_文件上传
打开题目页面如下 上传了一张带有木马的图片 返回的页面是空白的,不过路径变了 猜测存在根目录/upload 也可以通过dirsearch扫描根目录 命令: dirsearch -u http://61.147.171.105:65024/ -e* 终于得到了上传的文件的信息 但是测试发现.php文件以及.…...

以为是响应式对象丢失导致数据没有回显
背景:之前ruoyi生成的vue2代码, <el-form ref“form”,后面我改成vue3的写法,没有实例化form, 在vue3中是需要定义const form ref(); 导致点击了修改后,页面弹框显示出来,数据没有回显。 一直…...

来 Gitcode 免费体验 DeepSeek 蒸馏模型,开启 AI 探索新旅程
在 AI 技术飞速发展的时代,你是否也怀揣着对前沿科技的无限好奇与探索欲望?然而,昂贵的模型体验费用和复杂的操作流程,是不是让你一次次望而却步?现在,这些都不再是问题!DeepSeek 蒸馏模型现已强…...

2.Mkdocs配置说明(mkdocs.yml)【最新版】
官方文件:Changing the colors - Material for MkDocs 建议详细学习一下上面的官方网站↑↑↑ 我把我目前的配置文件mkdocs.yml代码写在下面👇🏻 #[Info] site_name: Mkdocs教程 #your site name 显示在左上角 site_url: http://wcowin.wo…...

云轴科技ZStack+海光DCU:率先推出DeepSeek私有化部署方案
针对日益强劲的AI推理需求和企业级AI应用私有化部署场景(Private AI),云轴科技ZStack联合海光信息,共同推动ZStack智塔全面支持DeepSeek V3/R1/Janus Pro系列模型,基于海光DCU实现高性能适配,为企业提供安全…...

扩增子分析|零模型2——基于βNTI的微生物随机性和确定性装配过程(箱线图和柱状图R中实现)
一、引言 我们之前发布的周集中老师团队零模型R中实战案例:扩增子分析|基于零模型的群落确定性和随机性构建过程——R实战_bmntd-CSDN博客。在文末只输出了一个.csv 表格。并没有提供绘图的方法,有小伙伴问如何在R中一键成图呢?还真可以&…...
专题:剑指offer
链表 JZ6 从尾到头打印链表 思路:先顺序输出到栈里面 然后再以此从栈顶弹出即可 /** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : * val(x), next(NULL) { * } * }; */ #include …...

DeepSeek 部署过程中的问题
文章目录 DeepSeek 部署过程中的问题一、部署扩展:docker 部署 DS1.1 部署1.2 可视化 二、问题三、GPU 设置3.1 ollama GPU 的支持情况3.2 更新 GPU 驱动3.3 安装 cuda3.4 下载 cuDNN3.5 配置环境变量 四、测试 DeepSeek 部署过程中的问题 Windows 中 利用 ollama 来…...

DeepSeek R1本地化部署 Ollama + Chatbox 打造最强 AI 工具
🌈 个人主页:Zfox_ 🔥 系列专栏:Linux 目录 一:🔥 Ollama 🦋 下载 Ollama🦋 选择模型🦋 运行模型🦋 使用 && 测试 二:🔥 Chat…...
应急场景中的数据融合与对齐
1. 概述 在应急管理中,快速、准确地掌握现场状况、实时监控灾情并进行决策至关重要。各类数据(如卫星影像、无人机图像、激光雷达点云、地理信息系统(GIS)数据、传感器数据、社交媒体信息、移动终端数据等)具有来源广泛、格式多样、时空特性不同等特点。如何将这些异构数…...

手机上运行AI大模型(Deepseek等)
最近deepseek的大火,让大家掀起新一波的本地部署运行大模型的热潮,特别是deepseek有蒸馏的小参数量版本,电脑上就相当方便了,直接ollamaopen-webui这种类似的组合就可以轻松地实现,只要硬件,如显存…...
Mellanox网卡信息查看
1、查看Mellanox网卡的SN(序列号)和PN mstvpd 04:00.0或者lspci -s 04:00.0 -vvv来自https://enterprise-support.nvidia.com/s/article/MLNX2-117-2532kn 2、查看Mellanox网卡驱动、固件版本 ethtool -i ens6np0...
【漫画机器学习】083.安斯库姆四重奏(Anscombe‘s quartet)
安斯库姆四重奏(Anscombes Quartet) 1. 什么是安斯库姆四重奏? 安斯库姆四重奏(Anscombes Quartet)是一组由统计学家弗朗西斯安斯库姆(Francis Anscombe) 在 1973 年 提出的 四组数据集。它们…...

TCP | RFC793
注:本文为 “ RFC793” 相关文章合辑。 RFC793-TCP 中文翻译 编码那些事儿已于 2022-07-14 16:02:16 修改 简介 翻译自: RFC 793 - Transmission Control Protocol https://datatracker.ietf.org/doc/html/rfc793 TCP 是一个高可靠的主机到主机之间…...
2025蓝桥杯JAVA编程题练习Day2
1.大衣构造字符串 问题描述 已知对于一个由小写字母构成的字符串,每次操作可以选择一个索引,将该索引处的字符用三个相同的字符副本替换。 现有一长度为 NN 的字符串 UU,请帮助大衣构造一个最小长度的字符串 SS,使得经过任意次…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...

Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...