linux下位机出现使用TCP socket为0的问题

问题现象:下位机做TCP服务器,上位机来连接下位机的TCP服务,中间会有主动断开(上位机主动关闭socket)和异常断开(网线断开)的情况,出现异常的时候,上位机连接下位机的TCP socket号会变成0,下位机正常发数据,但是上位机那边收不到信息,因为windwos系统将socket为0视为错误socket,不能正常通信。

问题分析:不用纠结windows为啥不能使用socket为0通信了(linux可以使用socket为0通信),

应该分析为啥socket会出现0的异常情况。

产生原因:1.在Linux中,socket 0和1通常用于标准输入输出重定向。‌ Socket 0和1分别代表标准输入(stdin)和标准输出(stdout),它们用于重定向标准输入输出流。linux系统默认会打开0和1的socket。

2.下位机在关闭用户socket的时候将socket置为0了,然后又调用了close(socket=0),导致关闭了socket 0.

3.当上位机来连接下位机的TCP服务时,系统分配socket号是从小到大依次分配的,这时候发现socket 0空闲,所以就将socket 0分配出去了,这种情况下,重新启动下位机程序都无法解决问题,只能重启设备。

解决办法:1.close socket以后,将socket置为-1这个非正常值,千万不能置为0.

                  2.当再次调用关闭socket函数的时候,先判断socket>0,再进行close操作。

总结:tcp使用不当,关闭了系统使用的socket 0,再次创建socket的时候,系统分配了socket 0引发的问题。初始化和清空变量的时候要考虑变量的有效值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/56315.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cocos中Sprite的填充模式

做进度条效果会用到Sprite的填充模式: cocoscreator教程:制作进度条_哔哩哔哩_bilibili

对接优惠折扣影票接口有什么好处?

对接电影票接口可以为开发者、商家和用户提供多种好处,以下是一些主要优势: 便捷性:用户可以直接在应用程序或网站上查询电影信息、选择座位和购票,无需离开平台即可完成整个购票流程。 提高用户粘性:为用户提供一站式…

chrome清除https状态

莫名其妙的http跳转到https的url了。 解决办法 浏览器地址栏输入:chrome://net-internals/#hsts 输入你需要删除的域名即可!!!

uni-app 打包成app时 限制web-view大小

今天对接一个uni-app的app 内置对方h5 web-view的形式 需要对方在web-view顶部加点东西 对方打的app的web-view始终是全屏的状态,对方表示做不到我要的效果 emmmmmm。。。。。。 于是乎 自己搭了个demo 本地h5跑起来审查了下代码,发现web-view是给绝对定…

静态变量、变量作用域、命名空间

静态变量 静态变量一般位于程序全局data区,只是编程语言根据它所在的scope做语言级别访问限制。 静态变量和全局变量 可以在C语言一个函数中定义static变量,并比较和全局变量的地址差异。 C系语言使用static关键字标示静态变量。 PHP使用大写的STATIC关键…

Unity3D 玩家攻击伤害计算详解

在游戏中,玩家攻击伤害计算是一个非常重要的功能,它决定了游戏中不同角色之间的战斗结果。本文将详细介绍Unity3D中玩家攻击伤害计算的实现方法,包括技术细节和代码实现。 对惹,这里有一个游戏开发交流小组,大家可以点…

影刀RPA实战:操作Mysql数据库

1.摘要 影刀RPA(Robotic Process Automation)是一种软件自动化工具,它可以模拟人类用户执行各种重复性任务,其中包括对数据库的操作。 我们可以使用软件自动化指令,通过获取数据库窗口对象来操作数据库,也…

Java项目:157 基于springboot技术的美食烹饪互动平台的设计与实现(含论文+说明文档)

作者主页:源码空间codegym 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 本知识管理系统有管理员和用户两个角色 管理员权限操作的功能包括管理美食,对美食留言进行回复,管理美食知识信息&…

为什么在 Vue 中处理 Excel 文件

1. 引言:为什么在 Vue 中处理 Excel 文件 在现代 web 应用中,数据展示和处理是常见的需求,尤其在业务系统中,Excel 文件作为一种常用的数据存储和传输格式,经常需要被处理和展示。在 Vue 应用中,使用第三方…

深入解析 Go 语言接口:多接口实现与接口组合的实际应用

文章目录 一、引言二、一个类型实现多个接口1. 定义多个接口2. 类型实现多个接口3. 使用多个接口 三、接口的组合1. 接口嵌套2. 实现复合接口 四、实际开发中的应用场景1. 多态与模块化设计2. 松耦合系统设计3. 测试与依赖注入4. 事件驱动架构中的应用 五、小结 一、引言 在 G…

C++ 算法学习——1.3 双向广度优先搜索

双向广度优先搜索算法步骤: 初始化: 从起始节点开始,分别初始化两个队列 q_forward 和 q_backward。将起始节点分别放入这两个队列中。初始化两个集合 visited_forward 和 visited_backward 用于记录已访问的节点。 循环: 在循环中…

安装和配置k8s可视化UI界面dashboard-1.20.6

安装和配置k8s可视化UI界面dashboard-1.20.6 1.环境规划2.初始化服务器1)配置主机名2)设置IP为静态IP3)关闭selinux4)配置主机hosts文件5)配置服务器之间免密登录6)关闭交换分区swap,提升性能7&…

2024入门测参考答案(c语言版)

先自己看代码思考,不理解的地方可以截图私聊…… 7-1 祝福祖国! 这是一个编程题模板。 2024年即将到来,作为一名大学生,为了表达在新的一年里,对祖国的祝福,请编写程序输出祝福语:在新的一年…

配置WSGI 服务器(Gunicorn)和Nginx 反向代理服务器部署Flask项目

部署 Flask 项目涉及到多个步骤,包括环境设置、依赖管理、配置、Web 服务器配置、数据库管理等。下面是一个详细的部署指南,假设你使用的是 Linux 系统(如 Ubuntu)。 前三个步骤教你如何在python虚拟环境下搭建项目并给出项目结构…

QT QML 练习8-Simple Transformations

简单的转换(Simple Transformations) 转换操作改变了一个对象的几何状态。QML元素对象通常能够被平移,旋转,缩放。下面我们将讲解这些简单的操作和一些更高级的用法。 我们先从一个简单的转换开始。用下面的场景作为我们学习的开始…

Qt- QSS风格选择器常用属性选择器样式表盒子

1. 风格设置 Qt 提供了 3 种整体风格,使用 QStyleFactory::keys() 来获取 (windowsvista 、Windows 、Fusion) 可以在 main.cpp 中调用 setStyle 方法对应用程序进行全局风格的设置 int main(int argc, char *argv[]) {QApplication a(arg…

Redis协议详解及其异步应用

目录 一、Redis Pipeline(管道)概述优点使用场景工作原理Pipeline 的基本操作步骤C 示例(使用 [hiredis](https://github.com/redis/hiredis) 库) 二、Redis 事务概述事务的前提事务特征(ACID 分析)WATCH 命…

用Python实现图片转ASCII艺术:图像处理与字符艺术的完美结合

解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 ASCII艺术是一种通过字符来表现图像的艺术形式,最早用于早期计算机显示器,它仅支持字符显示。如今,尽管图像分辨率和显示技术得到了极大的提升,ASCII艺术作为一种复古而别具一格的图像表现形式,仍然受到许多…

驱动开发系列21 - 编译内核模块的Makefile解释

一:内核模块Makefile #这一行定义了要编译的内核模块目标文件。obj-m表示目标模块对象文件(.o文件), #并指定了两个模块源文件:helloworld-params.c 和 helloworld.c。最终会生成这 #这两个.c文件的.o对象文件。 obj-m := helloworld-params.o helloworld.o#这行定义了内核…

爱快路由器配置腾讯云动态域名DDNS详细说明

直白点说就是让爱快路由器自动配置当前公网IP地址给域名,动态域名DDNS不清楚的请自行百度, 这里就可以看见操作日志,那么我们一步一步来配置它吧,首先登录爱快路由器,如下图: 那么腾讯云我们怎么找到ID和…