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

话题的衍伸

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

相关推荐
Casual4 小时前
【网络基础进阶】:看懂子网划分与 VLAN
开发语言·网络·php
2401_868534785 小时前
第7章 网络环境规划:综合篇考点梳理
网络·安全
mengge.cloud5 小时前
网络技术基础小白教程
linux·服务器·网络·云计算
2501_915106325 小时前
安卓抓包软件2026,免证书抓包 应用层抓包 代理抓包全解析
网络协议·计算机网络·网络安全·ios·adb·https·udp
严谨的麻辣烫5 小时前
2026 年静态 IP 为什么重新受到关注?从住宅代理安全问题看固定网络出口
运维·服务器·tcp/ip·网络安全
坐吃山猪5 小时前
【多线程】ThreadPool线程池参数说明
java·网络
Neighbor_OldY6 小时前
云上VPC流日志与网络流量安全分析实战:异常流量、横向移动、C2外连与恶意IP的发现与处置
网络协议·tcp/ip·安全
qq_401700417 小时前
Qt TCP 心跳到底应该怎么设计?
qt·tcp/ip
上海云盾-小余7 小时前
分层防护思路:WAF 应用防护与 TCP 底层防护如何协同
网络·网络协议·tcp/ip
tiantianuser7 小时前
NVME-oF IP 设计18 :如何进行多模块并行协同设计2
网络·nvme·rdma·高速传输·nvme-of