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

话题的衍伸

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

相关推荐
王二端茶倒水1 天前
从千兆到万兆:宽带运营不能只卖套餐,要管用户生命周期从千兆到万兆:宽带运营需要管理用户生命周期
后端·网络协议·架构
extrao4 天前
🚀 Kea DHCP4 自动分配系统完整搭建
网络协议
不做菜鸟的网工5 天前
BGP特性
网络协议
MrSYJ6 天前
TCP协议理解
后端·tcp/ip
明月_清风8 天前
开发者网络概念全扫盲:一篇搞定
后端·网络协议
刘马想放假8 天前
Modbus 全栈技术解析:TCP、RTU、ASCII、RTU over TCP
数据结构·网络协议
王二端茶倒水9 天前
一套可落地的无线运营方案,不能只管 AP,还要管用户、计费和运维
网络协议
162723816089 天前
EtherCAT 分布式时钟(DC)原理与配置实战:把多轴真正"对齐到同一时刻"
网络协议
王二端茶倒水9 天前
宽带无线项目,怎么从一次性交付变成长期运营收入?
网络协议