C# 自动Ping服务
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服务的更多相关文章
- 浅析-博客Ping服务
简介:PING服务是博客站点向博客目标网站.搜索引擎等发出的博客内容更新通知服务,然后博客目标网站.搜索引擎就会及时的索引.收录以及传播您的博客内容. PING原理 PING 服务是博客站点向博客目标 ...
- C# 自动提交到百度ping服务
C# 自动提交到百度ping服务 今天无意之间看到百度站长中有这个ping服务(孤陋寡闻呀).... 那什么什么是Ping服务 ping是基于XML_RPC标准协议的更新通告服务,用于博客把内容更新快 ...
- C# 自动Ping 测试服务器运行状况
通过小程序自动Ping配置文件中的IP地址,间隔时间.IP地址.手机号码通过配置文件获得. 废话不多说,上代码. using Newtonsoft.Json; using Newtonsoft.Jso ...
- Ping服务
什么是Ping服务 ping是基于XML_RPC标准协议的更新通告服务,用于博客把内容更新快速通知给百度,以便百度及时进行抓取和更新. Ping服务使用方法 你可以采取手动通知和自动通知两种方式使用p ...
- Nancy+BUI+SQLite自动更新服务端和客户端保护更新程序
写了一个自动更新服务网站和自动更新客户端.基本功能测试完毕.记录下 项目地址:https://github.com/TeemoHQ/AutoUpdate 需求 自动集成,回退版本,守护进程,服务端操作 ...
- Android 实现应用升级方案(暨第三方自动升级服务无法使用后的解决方案)
第三方推送升级服务不再靠谱: 以前在做Android开发的时候,在应用升级方面都是使用的第三方推送升级服务,但是目前因为一些非技术性的问题,一些第三方厂商不再提供自动升级服务,比如友盟,那么当第三方推 ...
- zabbix通过curl命令判断web服务是否正常并自动重启服务
zabbix通过curl命令判断web服务是否正常并自动重启服务 主要思路: 通过curl命令获取服务器响应码,如果正常返回200,不正常返回000 具体命令: curl -I -s -w " ...
- [转]C#创建服务及使用程序自动安装服务,.NET创建一个即是可执行程序又是Windows服务的exe
写在前面 原文地址:C#创建服务及使用程序自动安装服务,.NET创建一个即是可执行程序又是Windows服务的exe 这篇文章躺在我的收藏夹中有很长一段时间了,今天闲着没事,就自己动手实践了一下.感觉 ...
- windows service自动重启服务
服务一般都能正常的运行,但有时候也会有一些假死现象,比如公司有一考勤服务就因为依赖于硬件厂家的api, 但厂家api运行一段时间后会默名的假死,引起整个服务假死,因为这一假死现象具有不确定性,所以不太 ...
随机推荐
- js实现两个页面之间跳转参数传递
html在设计时,规定跳转地址后加"?"表示从此开始为跟随页面地址跳转的参数. 有时候,我们希望获得相应的跳转前页面里的内容,这时候我们就可以考虑将内容以参数形式放到地址中传过来, ...
- php字符串笔记
1.explode:英语的意思就是爆炸,此函数用于将字符串切成数组 2.implode:英语意思是向心聚,将数据拼成字符串. 3.substr:截取字符串,从指定位置截取指定长度,不指定就到最后 4. ...
- 试验删除RAC(ORA10G)节点
1.环境概述 2.删除一个节点 本实验中以删除第二个节点为示例. 2.1删除数据库实例 在第一个节点上(存活的节点)上使用DBCA删除第二个节点的实例. 执行完以上操作可以看下crs_stat –t ...
- 20145205 《Java程序设计》实验报告五:Java网络编程及安全
20145205 <Java程序设计>实验报告五:Java网络编程及安全 实验要求 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.客户端中输入明文,利用DES算法加密,D ...
- Apache Spark技术实战之8:Standalone部署模式下的临时文件清理
未经本人同意严禁转载,徽沪一郎. 概要 在Standalone部署模式下,Spark运行过程中会创建哪些临时性目录及文件,这些临时目录和文件又是在什么时候被清理,本文将就这些问题做深入细致的解答. 从 ...
- html css 样式继承的问题
body 设置css中可以继承的属性:letter-spacing.word-spacing.white-space.line-height.color.font等 但有时,body的样式,不能在有的 ...
- C#拾遗-边边角角
1.扩展方法 public static 方法返回值类型 扩展方法名(this 要扩展类型 obj,调用扩展方法时需要的参数){ return "返回值"} 2.运算符重载 pub ...
- EXCEL技巧——SUBTOTAL函数巧妙应用
想用COUNTA来计算非空单元格的数量,但它会把隐藏的单元格也算进去,所以用到了SUBTOTAL这个函数.做个记录,方便日后使用 函数表示: SUBTOTAL(function_num, ref1, ...
- 几何服务,cut功能,输入要素target(修改前)内容。
几何服务,cut功能测试,输入要素target(修改前)内容. {"geometryType":"esriGeometryPolyline","geo ...
- Glide请求图片能携带Cookie的哟!
在Web编程中我们都很熟知一个概念,当有了seesion登录状态时,你可以访问一些资源但如果你没有登录的话很多资源是无法访问的. 在android的WebApi中当然一样拥有这个概念.比如,用户的头像 ...