JAVA定时ping系统中的状态_Java定时执行ping命令,当ping不通时发邮件

1.定时器代码

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Calendar;

import java.util.Date;

import java.util.TimeZone;

import java.util.Timer;

import java.util.TimerTask;

import javax.servlet.ServletContextEvent;

import javax.servlet.ServletContextListener;

import com.cvicse.mail.pingIP.TimerTaskTest;

public class sendmail implements ServletContextListener{

public void contextDestroyed(ServletContextEvent arg0) {

}

public void contextInitialized(ServletContextEvent arg0) {

//pingIP,当ping不同时发送邮件

Timer timer3 = new Timer();

timer3.schedule(new TimerTaskTest(), 1000, 2000);

}

}

2.Java执行ping命令,以及发送邮件代码

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.util.Properties;

import java.util.TimerTask;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

import javax.mail.Message;

import javax.mail.Session;

import javax.mail.Transport;

import javax.mail.internet.InternetAddress;

import javax.mail.internet.MimeMessage;

import javax.servlet.ServletContext;

public class TimerTaskTest extends TimerTask{

private static SendMailConfig mailconfig = new SendMailConfig();

private String _content="邮件内容";

private String _subject="邮件标题";

private String[] _to = {"收件人邮箱","收件人邮箱"};

private ServletContext context = null;

@Override

public void run() {

boolean result = this.isReachable("fzkt.lixiaedu.com", 1, 5000);

if(!result){

Properties props = new Properties();

//SMTP服务器

props.put("mail.smtp.host", mailconfig.get_Host());

//是否需要SMTP验证

props.put("mail.smtp.auth", mailconfig.get_IsSTMP());

try{

Session mailSession = Session.getDefaultInstance(props);

//是否打印debug

//mailSession.setDebug(true);

Message message=new MimeMessage(mailSession);

//发件人

message.setFrom(new InternetAddress(mailconfig.get_From()));

int len=_to.length;

InternetAddress[] address=new InternetAddress[len];

for (int i = 0; i < _to.length; i++) {

address[i]=new InternetAddress(_to[i]);

}

//收件人

message.addRecipients(Message.RecipientType.TO,address);

//邮件主题

message.setSubject(this._subject);

//邮件内容

message.setContent(this._content,"text/html; charset=utf-8");

message.saveChanges();

Transport transport = mailSession.getTransport("smtp");

transport.connect(mailconfig.get_Host(), mailconfig.get_UserName(), mailconfig.get_UserPwd());

transport.sendMessage(message, message.getAllRecipients());

transport.close();

}catch(Exception e){

System.out.println(e);

}

}

}

/**

* * 测试是否能ping通

* * @param server

* * @param timeout

* * @return

* */

public boolean isReachable(String remoteIpAddress,int pingTimes,int timeOut) {

BufferedReader in = null;

Runtime r = Runtime.getRuntime();

// 将要执行的ping命令,此命令是windows格式的命令

String pingCommand = "ping " + remoteIpAddress + " -n " + pingTimes + " -w " + timeOut;

try {

Process p = r.exec(pingCommand);

if (p == null) {

return false;

}

in = new BufferedReader(new InputStreamReader(p.getInputStream()));

// 逐行检查输出,计算类似出现=23ms TTL=62字样的次数

int connectedCount = 0;

String line = null;

while ((line = in.readLine()) != null) {

connectedCount += getCheckResult(line);

}

// 如果出现类似=23ms TTL=62这样的字样,出现的次数=测试次数则返回真

return connectedCount == pingTimes;

} catch (Exception ex) {

// 出现异常则返回假

return false;

} finally {

try {

in.close();

} catch (IOException e) {

}

}

}

/**

* * 若line含有=18ms TTL=16字样,说明已经ping通,返回1,否則返回0.

* * @param line

* * @return

* */

private static int getCheckResult(String line) {

// System.out.println("控制台输出的结果为:"+line);

Pattern pattern = Pattern.compile("(\\d+ms)(\\s+)(TTL=\\d+)",

Pattern.CASE_INSENSITIVE);

Matcher matcher = pattern.matcher(line);

while (matcher.find()) {

return 1;

}

return 0;

}

}

3.配置代码

public class SendMailConfig {

private String _Host;// stmp服务器地址

private String _IsSTMP;//是否stmp

private String _UserName;//邮箱登陆名

private String _UserPwd;//邮箱密码

private String _From;//发送人

public SendMailConfig() {

_Host="smtp.163.com";

_IsSTMP = "true";

_UserName = "发件人邮箱名";

_UserPwd ="发件人邮箱密码";

_From ="发件人邮箱密码";

}

public String get_Host() {

return _Host;

}

public void set_Host(String host) {

_Host = host;

}

public String get_IsSTMP() {

return _IsSTMP;

}

public void set_IsSTMP(String isSTMP) {

_IsSTMP = isSTMP;

}

public String get_UserName() {

return _UserName;

}

public void set_UserName(String userName) {

_UserName = userName;

}

public String get_UserPwd() {

return _UserPwd;

}

public void set_UserPwd(String userPwd) {

_UserPwd = userPwd;

}

public String get_From() {

return _From;

}

public void set_From(String from) {

_From = from;

}

}

注意:有的电脑可能ping命令不能用,提示“ping不是内部或外部命令”,解决方法:

如果你的是XP的话,你在我的电脑上右键属性,高级里面找环境变量,找见path,如果没有,自己新建一条,编辑path,粘贴上

%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\system32\WBEM

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值