Java判断网络连接是否正常

实验室有一台服务器,用来负责接收数据,但是经常出现数据接收不全的问题,或者出现延迟接收的问题。我们怀疑是服务器的网络不稳定,间歇性断开,所以用Java写了一段测试网络连接的代码,其原理就是调用windows的ping命令,代码如下:

/**
 * @author HuHui
 * @功能:持续检测网络是否连通
 */
package com.hh.net;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.Date;

public class NetworkState implements Runnable {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		NetworkState ns = new NetworkState();
		new Thread(ns).start();//启动线程
	}

	// 判断网络状态
	public void isConnect() {
		Runtime runtime = Runtime.getRuntime();
		try {
			Process process = runtime.exec("ping " + "www.google.ca");
			InputStream is = process.getInputStream();
			InputStreamReader isr = new InputStreamReader(is);
			BufferedReader br = new BufferedReader(isr);
			String line = null;
			StringBuffer sb = new StringBuffer();
			while ((line = br.readLine()) != null) {
				sb.append(line);
				// System.out.println("返回值为:"+line);
			}
			is.close();
			isr.close();
			br.close();

			if (null != sb && !sb.toString().equals("")) {
				String logString = "";
				if (sb.toString().indexOf("TTL") > 0) {
					// 网络畅通
					logString = "网络正常,时间 " + this.getCurrentTime();
//					System.out.println(logString);
				} else {
					// 网络不畅通
					logString = "网络断开,时间 " + this.getCurrentTime();
//					System.out.println(logString);
				}
				this.writeIntoLog(logString);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	// 获得当前时间
	public String getCurrentTime() {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String time = sdf.format(new Date());
		return time;
	}

	// 将信息写入日志文件
	public void writeIntoLog(String logString) {
		File file = null;
		FileWriter fw = null;
		BufferedWriter bw = null;
		try {
			file = new File("C:\\netWorkState.log");
			if (!file.exists()) {
				file.createNewFile();// 如果不存在该文件,则创建
				String sets="attrib +H \""+file.getAbsolutePath()+"\"";
				Runtime.getRuntime().exec(sets);//将日志文件隐藏
			}
			fw = new FileWriter(file, true);
			bw = new BufferedWriter(fw);
			fw.append(logString + "\r\n");// 换行
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		} finally {
			try {
				bw.close();
				fw.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

	}

	@Override
	public void run() {
		// TODO Auto-generated method stub
		while (true) {
			this.isConnect();
			try {
				// 每隔3秒钟测试一次网络是否连通
				Thread.sleep(3000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值