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

话题的衍伸

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

相关推荐
jun_bai9 小时前
python写的文件备份网盘程序
运维·服务器·网络
爱吃牛肉的大老虎9 小时前
网络传输架构之gRPC讲解
网络·架构
Warren989 小时前
Python自动化测试全栈面试
服务器·网络·数据库·mysql·ubuntu·面试·职场和发展
云飞云共享云桌面10 小时前
无需配置传统电脑——智能装备工厂10个SolidWorks共享一台工作站
运维·服务器·前端·网络·算法·电脑
骆驼102410 小时前
手机热点和无线路由器在 IPv6 工作模式上的区别
网络·ipv6
jenchoi41312 小时前
【2025-11-23】软件供应链安全日报:最新漏洞预警与投毒预警情报汇总
网络·数据库·安全·web安全·网络安全
独行soc13 小时前
2025年渗透测试面试题总结-258(题目+回答)
网络·python·安全·web安全·渗透测试·安全狮
AI绘画小3314 小时前
网络安全(黑客技术)—2025自学手册
网络·安全·web安全·网络安全·渗透测试
s090713615 小时前
ZYNQ DMA to UDP 数据传输系统设计文档
网络协议·fpga开发·udp
恒创科技HK16 小时前
香港服务器流量有限制和带宽有限制区别在哪?
运维·服务器·网络