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.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 bool succ = false;
private string smsStr;
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','','','','','') ");
smsStr += "["+descs[j] + " IP:" + ips[j]+"]";
succ = false;
ips = remove(ips, j);
j--;
count = ;
}
else
{
j--;
}
}
else
{
listBox1.Items.Add(ips[j] + "成功");
Application.DoEvents();
count = ;
}
}
if (!succ) {
sendSMS(smsStr);
succ = true;
}
}
private void sendSMS(string sms) {
for (int xx = ; xx < phones.Length; xx++)
{
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('" + phones[xx] + "','PSNL002726','" + sms + " 不可达 ',getdate(),'2000-01-01 00:00:00.000','','','','','')");
//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','" + sms + " 不可达 ',getdate(),'2000-01-01 00:00:00.000','','','','','') ");
}
sms = "";
}
private string[] remove(string[] arr,int tx) {
List<string> list = new List<string>();
for (int ix = ; ix < arr.Length; ix++) {
list.Add(arr[ix]);
}
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[0] + "','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();
} }
}
}

源代码:http://download.csdn.net/detail/zuxuguang/9644038

以后要加油,多写一些东西。慢慢进步。生活需要有动力。

C# 自动Ping服务的更多相关文章

  1. 浅析-博客Ping服务

    简介:PING服务是博客站点向博客目标网站.搜索引擎等发出的博客内容更新通知服务,然后博客目标网站.搜索引擎就会及时的索引.收录以及传播您的博客内容. PING原理 PING 服务是博客站点向博客目标 ...

  2. C# 自动提交到百度ping服务

    C# 自动提交到百度ping服务 今天无意之间看到百度站长中有这个ping服务(孤陋寡闻呀).... 那什么什么是Ping服务 ping是基于XML_RPC标准协议的更新通告服务,用于博客把内容更新快 ...

  3. C# 自动Ping 测试服务器运行状况

    通过小程序自动Ping配置文件中的IP地址,间隔时间.IP地址.手机号码通过配置文件获得. 废话不多说,上代码. using Newtonsoft.Json; using Newtonsoft.Jso ...

  4. Ping服务

    什么是Ping服务 ping是基于XML_RPC标准协议的更新通告服务,用于博客把内容更新快速通知给百度,以便百度及时进行抓取和更新. Ping服务使用方法 你可以采取手动通知和自动通知两种方式使用p ...

  5. Nancy+BUI+SQLite自动更新服务端和客户端保护更新程序

    写了一个自动更新服务网站和自动更新客户端.基本功能测试完毕.记录下 项目地址:https://github.com/TeemoHQ/AutoUpdate 需求 自动集成,回退版本,守护进程,服务端操作 ...

  6. Android 实现应用升级方案(暨第三方自动升级服务无法使用后的解决方案)

    第三方推送升级服务不再靠谱: 以前在做Android开发的时候,在应用升级方面都是使用的第三方推送升级服务,但是目前因为一些非技术性的问题,一些第三方厂商不再提供自动升级服务,比如友盟,那么当第三方推 ...

  7. zabbix通过curl命令判断web服务是否正常并自动重启服务

    zabbix通过curl命令判断web服务是否正常并自动重启服务 主要思路: 通过curl命令获取服务器响应码,如果正常返回200,不正常返回000 具体命令: curl -I -s -w " ...

  8. [转]C#创建服务及使用程序自动安装服务,.NET创建一个即是可执行程序又是Windows服务的exe

    写在前面 原文地址:C#创建服务及使用程序自动安装服务,.NET创建一个即是可执行程序又是Windows服务的exe 这篇文章躺在我的收藏夹中有很长一段时间了,今天闲着没事,就自己动手实践了一下.感觉 ...

  9. windows service自动重启服务

    服务一般都能正常的运行,但有时候也会有一些假死现象,比如公司有一考勤服务就因为依赖于硬件厂家的api, 但厂家api运行一段时间后会默名的假死,引起整个服务假死,因为这一假死现象具有不确定性,所以不太 ...

随机推荐

  1. include、require、include_once和require_once理解

    都是在当前文件中包含引入并运行指定文件,include和require的不通之处仅仅在于发生错误时include产生一个警告脚本继续执行,而require产生一个致命的错误,脚本停止运行.有了once ...

  2. bzoj1724: [Usaco2006 Nov]Fence Repair 切割木板(贪心+堆)

    一开始被题目读错题= =以为每次只能割一块,那么就是从大到小切 但是其实是可以分为几堆来切的 所以可以逆着来,变为合并n个木板代价最小 易证每次找最小的两堆合并代价最小 用优先队列维护堆..偷偷懒= ...

  3. DevOps is dirty work - Dream in One-Click

    真是一晃就到年底,年初许的梦想实现了吗?这么残忍的问题还是不要知道答案了吧:) 这恍若隔世的大半年,不仅没有承接着上篇继续聊Continuous Delivery (CD),反而疑似荒废.然而,梦想还 ...

  4. PDMS二次开发之PML开发一些常见查询语句

    1.查找session 以及session number var !DBname DBname !db = object db(!DBname) !session = !db.lastsession( ...

  5. LWL-Hitokoto API(一言-纯净API)

    著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:liwanglin12链接:https://blog.lwl12.com/read/hitokoto-api.html来源:L ...

  6. pt-table-checksum和pt-heartbeat的使用

    一.pt-table-checksum 1.主从上均新建账户GRANT SELECT, PROCESS, SUPER, REPLICATION SLAVE ON *.* TO 'checksum'@' ...

  7. CentOS下PHP7的编译安装,MySQL的支持和一些问题的解决

    最近试了一下PHP7,在编译和支持MySQL上都遇到一些问题,相信不少同学也同样遇到,所以在这里聊一下这个过程.简单来讲编译PHP7只需要3步: 1../buildconf --force 2../c ...

  8. 在win10里打开.hlp文件

    D7的帮助都是.hlp格式的,  目前win10还没有相应的补丁, 导致无法打开 自己手动来处理一下: 1. 下载连接中的winhlp32.rar, 这个是从XP系统里提取的 2. 修改windows ...

  9. FireDAC 连接SQL Server一些要注意的地方

    TFDConnection: FetchOptions.Mode 设置为fmAll, 返回全部结果, 否则默认只返回前50条, 效果与open以后再执行FetchAll一样 Specifies how ...

  10. 关于flex中正则表达式上下文匹配的问题

    按照课本与网上的说法,斜杠'/'表示匹配上下文,例如ab/cd表示当ab后面有cd时匹配ab 然而如果实际这么写,flex在调用该正则表达式时触发'unrecognized rule' flex源代码 ...