前段時間在項目中做了一個發送短信的功能,直到項目上線后,才發現了自己菜鳥的本質——考慮問題的不周全。發送短信,在我們的系統中會自動生成短信內容並且構造好聯系人、電話等一條字段,插入到另外一個地方的數據庫,由他們連接運營商發送短信至用戶。但使用中有一段時間,我這邊的系統顯示短信生成正常,而用戶卻沒有收到短信,在百分百確定代碼沒有問題后,咨詢了一個老鳥,才知道,發短信前是需要判斷一下那邊的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 }