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

需求分析:

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

实现的技术方案:

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

代码层面的实现:

一、ping实现监测设备存活

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

cs 复制代码
 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;

cs 复制代码
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秒检测一次,如果断开,那么立即记录下日志,同时通过企业微信发送消息到指定的服务群中。具体实现不是本文的重点,就不在此细说了。

话题的衍伸

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

相关推荐
FIavor.5 小时前
怎么办这是Apifox里执行http://localhost:9002/goods/getByUserName?name=“张三“为什么我改了还是500?
java·网络·网络协议·http
mit6.8245 小时前
[cpprestsdk] http_client_config | GET | request()
网络·网络协议·http
00后程序员张6 小时前
tcpdump 抓包分析,命令、过滤技巧、常见症状定位与移动真机补充方案
网络·测试工具·ios·小程序·uni-app·iphone·tcpdump
李辰洋7 小时前
STP配置
运维·服务器·网络
九河云8 小时前
如何选择适合的加密方法来保护云计算中的数据
网络·科技·物联网·金融·云计算
码不停蹄Zzz8 小时前
xdma IP使用教程1-xdma ip核配置
网络协议·tcp/ip·fpga开发
潇凝子潇9 小时前
网络协议的零拷贝 和 操作系统的零拷贝异同
网络·网络协议
RTC老炮9 小时前
webrtc弱网-BitrateEstimator类源码分析与算法原理
网络·人工智能·算法·机器学习·webrtc
悟能不能悟9 小时前
用cmd命令修改适配器ip
网络·tcp/ip·github