C# 自动Ping 测试服务器运行状况
通过小程序自动Ping配置文件中的IP地址,间隔时间、IP地址、手机号码通过配置文件获得。
废话不多说,上代码。
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Net.NetworkInformation;
using System.Text;
using System.Windows.Forms; namespace AutoPing
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
getIps();
LanSearch();
timer1.Interval = interval;
timer1.Start();
timer2.Start();
} private void button1_Click(object sender, EventArgs e)
{
//MessageBox.Show( CmdPing("192.168.1.13"));
//displayReply(); //LanSearch();
//MessageBox.Show(new PingServices().GetPingResult("192.168.1.13", 5, 100, 2));
} /// <summary>
/// 是否能 Ping 通指定的主机
/// </summary>
/// <param name="ip">ip 地址或主机名或域名</param>
/// <returns>true 通,false 不通</returns>
public bool Ping(string ip)
{
System.Net.NetworkInformation.Ping p = new System.Net.NetworkInformation.Ping();
System.Net.NetworkInformation.PingOptions options = new System.Net.NetworkInformation.PingOptions();
options.DontFragment = true;
string data = "Test Data!";
byte[] buffer = Encoding.ASCII.GetBytes(data);
int timeout = ; // Timeout 时间,单位:毫秒
System.Net.NetworkInformation.PingReply reply = p.Send(ip, timeout, buffer, options);
if (reply.Status == System.Net.NetworkInformation.IPStatus.Success)
return true;
else
return false;
} private string[] ips = null;
private string[] descs = null;
private string[] phones = null;
private int interval = ;
private void getIps() {
string[] lines = System.IO.File.ReadAllLines("iplist.json");
String ipsFile = "";
foreach (string line in lines)
{
ipsFile = ipsFile + "\t" + line;
}
JObject udJson = JObject.Parse(ipsFile);
interval = Int32.Parse(udJson["interval"].ToString());
JArray jips = (JArray)JsonConvert.DeserializeObject(udJson["Ips"].ToString());
ips = new string[jips.Count];
descs = new string[jips.Count];
for (int i = ; i < jips.Count; i++)
{
//new Loger().WriteLogFile("" + jips[i]["desc"].ToString());
ips[i] = jips[i]["ip"].ToString();
descs[i] = jips[i]["desc"].ToString();
}
JArray jphones = (JArray)JsonConvert.DeserializeObject(udJson["phones"].ToString());
phones = new string[jphones.Count];
for (int i = ; i < jphones.Count; i++)
{
//new Loger().WriteLogFile("" + jphones[i]["phone"].ToString());
phones[i] = jphones[i]["phone"].ToString();
}
}
/// <summary> /// </summary>
int count = ;
private void LanSearch()
{
//string ip = "192.168.1.134";
for(int j = ; j < ips.Length; j++)
{
if (!Ping(ips[j]))
{
count++;
listBox1.Items.Add(ips[j] + "失败"+count);
Application.DoEvents();
if (count == ) {
listBox1.Items.Add(ips[j] + "失败超过5次,发送短信");
Application.DoEvents();
new Loger().WriteLogFile(ips[j] + "失败超过5次,发送短信");
//new Loger().WriteLogFile("insert into sms_messagebase(sms_phone, sms_psnlid, sms_message, sms_createdate, sms_acceptdate, sms_system, sms_type1, sms_type2 , sms_createpsnlid, sms_createcomputer) values('18290815800','PSNL002726','" + ips[j] + "不可达',getdate(),'2000-01-01 00:00:00.000','','','','','') ");
for(int xx = ; xx < phones.Length; xx++)
{
HisDBHelper.ExcuteSQL("insert into sms_messagebase(sms_phone, sms_psnlid, sms_message, sms_createdate, sms_acceptdate, sms_system, sms_type1, sms_type2 , sms_createpsnlid, sms_createcomputer) values('"+phones[xx]+"','PSNL002726','" +descs[j]+" IP:"+ ips[j] + " 不可达 ',getdate(),'2000-01-01 00:00:00.000','','','','','') ");
}
ips = remove(ips, j);
count = ;
}
else
{
j--;
}
}
else
{
listBox1.Items.Add(ips[j] + "成功");
Application.DoEvents();
count = ;
}
} } private string[] remove(string[] arr,int tx) {
List<string> list = arr.ToList();
list.RemoveAt(tx);
return list.ToArray();
} private void timer1_Tick(object sender, EventArgs e)
{ LanSearch();
} private void button1_Click_1(object sender, EventArgs e)
{ } private void timer2_Tick(object sender, EventArgs e)
{
DateTime dt = DateTime.Now; //new Loger().WriteLogFile(dt.ToString("yyyy-MM-dd HH:mm:ss") +"" +dt.ToString("yyyy-MM-dd HH:mm:ss").Equals(dt.ToString("yyyy-MM-dd 19:59:00")));
if (dt.ToString("yyyy-MM-dd HH:mm:ss").Equals(dt.ToString("yyyy-MM-dd 09:30:00")))
{
getIps();
HisDBHelper.ExcuteSQL("insert into sms_messagebase(sms_phone, sms_psnlid, sms_message, sms_createdate, sms_acceptdate, sms_system, sms_type1, sms_type2 , sms_createpsnlid, sms_createcomputer) values('" + phones[] + "','PSNL002726','外围服务检测程序运行正常',getdate(),'2000-01-01 00:00:00.000','','','','','') ");
//new Loger().WriteLogFile("发送");
} }
}
}
配置文件采用JSON文件,偷懒了,有现成读取代码。
{
"interval":"600000",
"Ips": [
{ "ip": "192.168.1.13","desc":"一号机房" },
{ "ip": "192.168.1.222","desc":"二号机房" },
{ "ip": "192.168.1.28","desc":"三号机房" },
{ "ip": "192.168.1.18","desc":"四号机房" }
],
"phones": [
{ "phone": "18888888888" },
{ "phone": "13333333333" }
]
}
读取JSON需要类库Newtonsoft.Json.dll,网上自行下载。
写日志的实体类
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text; namespace AutoPing
{
class Loger
{
/**//// <summary>
/// 写入日志文件
/// </summary>
/// <param name="input"></param>
public void WriteLogFile(string input)
{
/**/
///指定日志文件的目录
string fname = Directory.GetCurrentDirectory() + "\\LogFile.txt";
/**/
///定义文件信息对象 FileInfo finfo = new FileInfo(fname); if (!finfo.Exists)
{
FileStream fs;
fs = File.Create(fname);
fs.Close();
finfo = new FileInfo(fname);
} /**/
///判断文件是否存在以及是否大于2K
if (finfo.Length > * * )
{
/**/
///文件超过5MB则重命名
File.Move(Directory.GetCurrentDirectory() + "\\LogFile.txt", Directory.GetCurrentDirectory() + DateTime.Now.TimeOfDay + "\\LogFile.txt");
/**/
///删除该文件
//finfo.Delete();
}
//finfo.AppendText();
/**/
///创建只写文件流 using (FileStream fs = finfo.OpenWrite())
{
/**/
///根据上面创建的文件流创建写数据流
StreamWriter w = new StreamWriter(fs); /**/
///设置写数据流的起始位置为文件流的末尾
w.BaseStream.Seek(, SeekOrigin.End); /**/
///写入“Log Entry : ”
w.Write("\n\rLog Entry : "); /**/
///写入当前系统时间并换行
w.Write("{0} {1} \n\r", DateTime.Now.ToLongTimeString(),
DateTime.Now.ToLongDateString()); /**/
///写入日志内容并换行
w.Write(input + "\n\r"); /**/
///写入------------------------------------“并换行
w.Write("\n\r------------------------------------\n\r"); /**/
///清空缓冲区内容,并把缓冲区内容写入基础流
w.Flush(); /**/
///关闭写数据流
w.Close();
} }
}
}
访问数据库的实体类请查看另外一篇随笔。
其实不需要太多代码。主要是偷懒了。都用原来写的现成的东西了。
以后要加油,多写一些东西。慢慢进步。生活需要有动力。
C# 自动Ping 测试服务器运行状况的更多相关文章
- 【Azure 应用服务】App Service 运行状况健康检查功能简介 (Health check)
通过Azure App Service门户,启用Health Check来监视应用服务的实例,当发现其中一个实例处于不健康(unhealthy)状态时,通过重新路由(即把有问题的实例从负载均衡器中移除 ...
- 你真的了解 MySQL 数据库的运行状况吗?
2015年第三方市场调查机构 Evans 数据公司最近公布的一系列客户调查数据显示,在过去两年里,MySQL 在所有开发者使用的数据库中获得了25%的市场份额,Evans 公司的本次调查显示,数据库的 ...
- 使用VisualVM分析tomcat运行状况(1)
VisualVM是一款java程序性能分析与调优工具,而且还是jdk中自带的工具之一. tomcat也是一个java程序,自然也可以用它来进行监控.不过这里还是会有些问题,tomcat有两种常用的期待 ...
- 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗? 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现! 是否有一个全局视角来查看系统的运行状况? 有什么办法可以监控到JVM的实时运行状态?
https://alibaba.github.io/arthas/ Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱. 当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决 ...
- 微服务中的健康监测以及其在ASP.NET Core服务中实现运行状况检查
1 .什么是健康检查? 健康检查几乎就是名称暗示的.它是一种检查您的应用程序是否健康的方法.随着越来越多的应用程序转向微服务式架构,健康检查变得尤其重要(Health Check).虽然微服务架构有很 ...
- 【docker】【mysql】docker安装mysql,阿里云docker镜像加速器,docker搜索查看远程仓库上的镜像,docker拉取镜像,查看本地所有镜像,查看容器的运行状况,查看容器的详细信息
在docker上安装mysql有两种方式 1.通过Dockerfile构建 2.直接在docker hub上拉取镜像安装 =================本篇采用方法2=============== ...
- SharePoint运行状况分析器有关磁盘空间不足的警告
对于负责管理SharePoint内部部署安装的SharePoint管理员,SharePoint Health Analyzer是一款出色的工具.此功能不仅有助于解决服务器故障和服务失败的问题,还提供了 ...
- 使用 Apachetop 实时监测web服务器运行状况
转自 http://42.96.169.71/blog/2013/01/26/shi-yong-apachetop-shi-shi-jian-ce-webfu-wu-qi-yun-xing-zhuan ...
- 监控 SQL Server (2005/2008) 的运行状况
Microsoft SQL Server 2005 提供了一些工具来监控数据库.方法之一是动态管理视图.动态管理视图 (DMV) 和动态管理函数 (DMF) 返回的服务器状态信息可用于监控服务器实例的 ...
随机推荐
- 使用BigDecimal进行精确运算以及格式化输出数字
一.引言 借用<Effactive Java>这本书中的话,float和double类型的主要设计目标是为了科学计算和工程计算.他们执行二进制浮点运算,这是为了在广域数值范围上提供 ...
- 11.static关键字
1.用static修饰的方法,直接用类调用 2.static修饰的方法只能调用static方法,不能调用非 static属性和方法 ①因为static属性和方法在类没有实例化的时候调用 ②因为普通属 ...
- Jingle 相关问题
1. //page模板默认的相对位置,主要用于开发hybrid应用,实现page的自动装载 basePagePath : 'html/'. 所以所有的section 要放在html文件下面才行
- xampp 80端口被占用解决办法
很多朋友安装xampp之后,启用服务器或者数据库失败,发现端口已经被占用.因为每台电脑占用端口的软件不一样,要如何解决这个问题. 第一种解决方法: 检查软件安装路径中是否有中文,如下图: 解决方法: ...
- H TC並沒有成為下一個摩托羅拉或諾基亞。
關於2014年第四季度,H T C在三季度財報說明中提到,“年度旗艦H T CO ne(M 8)與中端機型H T C D esire系列在競爭日趨激烈的智能手機市場保持穩定的銷售,市占率有所提升,延續 ...
- 20145205《Java程序设计》课程总结
每周读书笔记链接汇总 20145205 <Java程序设计>第1周学习总结 20145205<Java程序设计>第2周学习总结 20145205 <Java程序设计> ...
- 【转】logback logback.xml常用配置详解(一)<configuration> and <logger>
原创文章,转载请指明出处:http://aub.iteye.com/blog/1101260, 尊重他人即尊重自己 详细整理了logback常用配置, 不是官网手册的翻译版,而是使用总结,旨在更快更透 ...
- Java中的递归运算
Java中的递归运算是一种在自己的方法内部调用自己的方法 递归的设计思想是:把一个复杂的问题,分解为若干个等同的子问题,重复执行,直到之问题能够简单到直接求解,这样复杂的问题就得以解决. 递归运算有两 ...
- java常用集合框架底层实现简介与注意点
Collection: ArrayList:1:底层实现是数组,默认长度是10.2:add(),判断是否数组越界,是数组扩容为原来的两倍.3:remove(),copy数组,size-1,释放空虚的空 ...
- Myeclipese建立servelet时出现带有javax.servlet.http.HttpServlet;变成了红色的解决方法
如下图 上面这部分都变成了红色,说明servlet-api.ja还没有导入进来,只需要单击项目名称然后properties--java Build Path--Libraties--MyEclipse ...