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

拌合站软件开发(27)监测各项IP设备可访问性

需求分析:

        之前项目设备之间的互联都是通过交换机,IP地址在同一个子网,默认设备之间网络都是联通的,但实际中发现想简单了,因为各种原因,会导致设备离线网络不通,而往往又是只有在司机过磅的时候发现,不管什么原因导致设备离线,客户都会认为是你的系统不稳定。所以计划开发对所有的IP设备可访问性做个监测。

实现的技术方案:

        监测网络可达性,作者熟知的就是ping或者TCP/UDP发包,前者有一定的局限性,有些场合会禁止ICMP协议,只要提供服务那么肯定会开放端口,那么就可以做端口探测的方式监测是否存活。因为目前设备就是在局域网中,那么作者肯定首选最简单的方式ping来做实现了。

代码层面的实现:

        一、ping实现监测设备存活

        c#要实现ping检测功能应该将非常easy,使用System.Net.NetworkInformation 下的ping类即可。                定义一个静态异步函数了,我这里比较严格,如果ping的过程中只要有一次不成功那么就认定为网络是不通的。这个可以根据实际的网络环境来定,也可以多次循环,如果ping通了,那么就认为是通的。

 public static async Task<bool> IsIpReachableAsync(string ip, int timeout = 3000, int retryCount = 2){using var ping = new Ping();for (int i = 0; i < retryCount; i++){try{var reply = await ping.SendPingAsync(ip, timeout);if (reply.Status != IPStatus.Success)return false;}catch (PingException) { /* 忽略特定错误 */ }}return true;}

        二、通过端口检测来判断是否存活

        主要就是使用socket 来建立连接,如果可以建立连接那么表明设备是存活的,如果不能建立那么表明网络是不通的。要引入 using System.Net.Sockets;      

public static async Task<bool> IsPortReachableAsync(string ip, int port = 80, int timeout = 3000)
{using var client = new TcpClient();try{var task = client.ConnectAsync(ip, port);var completedTask = await Task.WhenAny(task, Task.Delay(timeout));if (completedTask == task && client.Connected){client.Close();return true;}}catch { /* 捕获所有异常 */ }return false;
}

        三、通过定时任务来检测设备存活

        定时任务这里使用 System.Threading.Timer 来,作者设备比较少也要求不高,所以定时任务每10秒检测一次,如果断开,那么立即记录下日志,同时通过企业微信发送消息到指定的服务群中。具体实现不是本文的重点,就不在此细说了。

话题的衍伸

        前面有文章说过通过建立心跳包来判断客户系统是否断网,一直在想如何改善系统的高可靠性。如果客户的日常网络断开,那么是否可以切换到紧急使用的物联网,走流量,保障系统的数据不中断。也有人可能要说为啥不把系统部署在本地不连互联网不就行了。这个就又是另外一个衍伸话题,网络租赁的模式才有收到后续服务费的可能,这样就不是一锤子买卖了。

http://www.dtcms.com/a/479073.html

相关文章:

  • 网站设计论文答辩问题及答案万能回答企业管理培训课程推荐
  • Cannot Run Git: error launching git:
  • 模板建站源码wordpress调用二级分类目录
  • 车载刷写框架 --- 刷写过程中擦除相关思考
  • 初中做语文题的网站怎么开网站 第一步怎么做
  • 漯河网站推广哪家好微信小程序模板使用
  • 【大模型实战笔记 3】大模型Function Call的原理及应用
  • 校园网站的作用广州网络推广外包平台
  • 微网站 获取手机号凡客诚品网站建设策划书
  • MyCat 实战:订单与用户数据的水平分库分表 + MySQL 读写分离完整方案
  • Learning Path Recommendation
  • 【足式机器人控制】名义落足点与Raibert落足点详细讲解
  • 简单聊聊数据可视化大屏制作的前端设计与后端开发
  • 做网站首选科远网络中文域名网站链接无法打开
  • 客户管理系统中的“客户画像”是什么?如何通过数据构建精准用户画像?
  • 物流网站素材校网站建设方案
  • 点击网站出现微信二维码的链接怎么做小网站模板
  • 一次HTTP请求的旅程:用strace + tcpdump追踪DNS与TCP
  • Android监听第三方播放获取音乐信息及包名
  • wordpress仿站教程网wordpress 房屋租赁
  • 在线视频网站开发成本手机版网页开发者工具
  • [GO]一文理清Go语言依赖管理:从go get到Go Modules,避坑指南
  • 嵌入式软件架构--按键消息队列2(组合键,按键转义与三种消息模式)
  • 电商平台有哪些网站名山东省城乡建设厅网站
  • Vue 3 + Vite:现代前端开发新范式-前端开发的”涡轮增压引擎”-优雅草卓伊凡
  • 前端-Vuex
  • 微信小说网站开发商丘网络科技有限公司
  • 避免时区问题的最佳实践, 数据库, mybatis
  • 望江县建设局网站发布网页
  • Codeforces1058(Div.2) A至F题解