1. 程式人生 > 實用技巧 >使用java網路連通狀態自動檢測器

使用java網路連通狀態自動檢測器

一、需要的環境

①jdk8

②eclipse2020

③依賴的jar包 javax.mail.jar  httpclient-4.3.6.jar

二、程式碼

package com.star.networktest;

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.*;
import javax.mail.BodyPart;
import javax.mail.Message;
import
javax.mail.Multipart; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.*; import javax.activation.*; public class Access { private String host = ""; // smtp伺服器 private String from = ""; // 發件人地址 private String to = ""; // 收件人地址 private String affix = ""; //
附件地址 private String affixName = ""; // 附件名稱 private String user = ""; // 使用者名稱 private String pwd = ""; // 密碼 private String subject = ""; // 郵件標題 public static void main(String[] args) throws IOException { Thread t=new Thread() { public void run() {
try { Timer(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }; t.start(); } public static void printlog(String msg) throws IOException { Date date = new Date(); File f = new File("F:/java/workspace/log/log.txt"); FileOutputStream fop = new FileOutputStream(f,true); // 構建FileOutputStream物件,檔案不存在會自動新建 OutputStreamWriter writer = new OutputStreamWriter(fop, "UTF-8"); // 構建OutputStreamWriter物件,引數可以指定編碼,預設為作業系統預設編碼,windows上是gbk writer.append(date.toString()+"\t"); writer.append(msg); // 寫入到緩衝區 writer.append("\r\n"); // 換行 // writer.append("English"); // 重新整理快取衝,寫入到檔案,如果下面已經沒有寫入的內容了,直接close也會寫入 writer.close(); // 關閉寫入流,同時會把緩衝區內容寫入檔案,所以上面的註釋掉 fop.close(); // 關閉輸出流,釋放系統資源 FileInputStream fip = new FileInputStream(f); // 構建FileInputStream物件 InputStreamReader reader = new InputStreamReader(fip, "UTF-8"); // 構建InputStreamReader物件,編碼與寫入相同 StringBuffer sb = new StringBuffer(); while (reader.ready()) { sb.append((char) reader.read()); // 轉成char加到StringBuffer物件中 } System.out.println(sb.toString()); reader.close(); // 關閉讀取流 fip.close(); // 關閉輸入流,釋放系統資源 } public void setAddress(String from, String to, String subject) { this.from = from; this.to = to; this.subject = subject; } public void setAffix(String affix, String affixName) { this.affix = affix; this.affixName = affixName; } public void send(String host, String user, String pwd) { this.host = host; this.user = user; this.pwd = pwd; Properties props = new Properties(); // 設定傳送郵件的郵件伺服器的屬性(這裡使用網易的smtp伺服器) props.put("mail.smtp.host", host); // 需要經過授權,也就是有戶名和密碼的校驗,這樣才能通過驗證(一定要有這一條) props.put("mail.smtp.auth", "true"); // 用剛剛設定好的props物件構建一個session Session session = Session.getDefaultInstance(props); // 有了這句便可以在傳送郵件的過程中在console處顯示過程資訊,供除錯使 // 用(你可以在控制檯(console)上看到傳送郵件的過程) session.setDebug(true); // 用session為引數定義訊息物件 MimeMessage message = new MimeMessage(session); try { // 載入發件人地址 message.setFrom(new InternetAddress(from)); // 載入收件人地址 message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); // 載入標題 message.setSubject(subject); // 向multipart物件中新增郵件的各個部分內容,包括文字內容和附件 Multipart multipart = new MimeMultipart(); // 設定郵件的文字內容 BodyPart contentPart = new MimeBodyPart(); contentPart.setText("當前網址https://idp.tjut.edu.cn/idp/shibboleth 不能訪問,請儘快修復"); multipart.addBodyPart(contentPart); // 新增附件 BodyPart messageBodyPart = new MimeBodyPart(); DataSource source = new FileDataSource(affix); // 新增附件的內容 messageBodyPart.setDataHandler(new DataHandler(source)); // 新增附件的標題 // 這裡很重要,通過下面的Base64編碼的轉換可以保證你的中文附件標題名在傳送時不會變成亂碼 // 報錯參考https://jingyan.baidu.com/article/e73e26c0a2617a24adb6a7d4.html sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder(); messageBodyPart.setFileName("=?GBK?B?" + enc.encode(affixName.getBytes()) + "?="); multipart.addBodyPart(messageBodyPart); // 將multipart物件放到message中 message.setContent(multipart); // 儲存郵件 message.saveChanges(); // 傳送郵件 Transport transport = session.getTransport("smtp"); // 連線伺服器的郵箱 transport.connect(host, user, pwd); // 把郵件傳送出去 transport.sendMessage(message, message.getAllRecipients()); transport.close(); } catch (Exception e) { e.printStackTrace(); } } // 實現定時器 public static void Timer() throws IOException { while(true) { try { Thread.sleep(59000); SimpleDateFormat d =new SimpleDateFormat("mm"); // if(d.format(new Date()).equals("01")) { if(d.format(new Date()).equals("24")) { StringBuffer error = new StringBuffer(); long begintime = System.currentTimeMillis(); try { // PKIX path building failed 自己的Java環境沒有相關網站的證書 去網站下載證書匯入到自己的java環境 URL url = new URL("https://idp.tjut.edu.cn/idp/shibboleth"); HttpURLConnection urlcon = (HttpURLConnection) url.openConnection(); urlcon.connect(); // 獲取連線 InputStream is = urlcon.getInputStream(); System.out.println(urlcon.getResponseCode()); // 獲取連線狀態碼 System.out.println(urlcon.getResponseMessage()); // 獲取HTTP響應訊息 printlog("訪問正常"); } catch (IOException e) { System.out.println(e); Access cn = new Access(); // 設定發件人地址、收件人地址和郵件標題 cn.setAddress("[email protected]", "[email protected]", "網路連通狀態檢測報告"); // 設定要傳送附件的位置和標題 cn.setAffix("F:/java/workspace/log/log.txt", "log.txt"); cn.send("smtp.tom.com", "[email protected]", "****"); cn.setAddress("[email protected]", "[email protected]", "網路連通狀態檢測報告"); // 設定要傳送附件的位置和標題 cn.setAffix("F:/java/workspace/log/log.txt", "log.txt"); cn.send("smtp.tom.com", "[email protected]", "******"); printlog("訪問異常,已將報告發送至郵箱"); } } } catch (InterruptedException e) { e.printStackTrace(); } } } }