前段时间在项目中做了一个发送短信的功能,直到项目上线后,才发现了自己菜鸟的本质——考虑问题的不周全。发送短信,在我们的系统中会自动生成短信内容并且构造好联系人、电话等一条字段,插入到另外一个地方的数据库,由他们连接运营商发送短信至用户。但使用中有一段时间,我这边的系统显示短信生成正常,而用户却没有收到短信,在百分百确定代码没有问题后,咨询了一个老鸟,才知道,发短信前是需要判断一下那边的IP是否能ping通的,如果ping不同,你这边的短信插不过去,系统就会一直等待,造成延迟。
从老鸟那请教了一下,原来只需要加几行代码,就能完成这个工作,豁然开朗之际,把我的喜悦分享给大家。
使用中发现,如果需要判断系统连接一个url是否正常,试用URL中的openStream()方法是非常便捷的。
1 package com.cjj.client; 2 3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.net.InetAddress; 6 import java.net.URL; 7 8 public class InetJavaTest { 9 private static String remoteInetAddr = "59.231.36.59";//需要连接的IP地址 10 /** 11 * 传入需要连接的IP,返回是否连接成功 12 * @param remoteInetAddr 13 * @return 14 */ 15 public static boolean isReachable(String remoteInetAddr) { 16 boolean reachable = false; 17 try { 18 InetAddress address = InetAddress.getByName(remoteInetAddr); 19 reachable = address.isReachable(5000); 20 } catch (Exception e) { 21 e.printStackTrace(); 22 } 23 return reachable; 24 } 25 26 public static void main(String[] args) { 27 URL url = null; 28 Boolean bon = false; 29 try { 30 url = new URL("http://baicu.com/"); 31 InputStream in = url.openStream();//打开到此 URL 的连接并返回一个用于从该连接读入的 InputStream 32 System.out.println("连接正常"); 33 in.close();//关闭此输入流并释放与该流关联的所有系统资源。 34 } catch (IOException e) { 35 System.out.println("无法连接到:" + url.toString()); 36 } 37 bon = isReachable(remoteInetAddr); 38 System.out.println("pingIP:" + bon); 39 } 40 }