2013-06-26 52 views
0

我試圖檢查服務器是否可用,但運行此代碼時,我得到錯誤的服務器不可用或有時申請凍結,即使服務器運行正常:檢查服務器可用性不工作

InetAddress in; 
    in = null; 

     try { 
      in = InetAddress.getByAddress(new byte[] { (byte)192, (byte)168, (byte)16, (byte)48}); 
     } catch (UnknownHostException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     try { 
      if (in.isReachable(5000)) { 
       loadProduct(); 
      } else 
      { 
       showAlertBox("Warning", "Server not available!"); 
      } 
     } catch (IOException e) { 
      showAlertBox("Warning", "Server not available!"); 
     } 

有沒有更好的方法來檢查服務器是否在線?

+0

我找到簡單的解決方案在http://stackoverflow.com/a/15785326/1866833 感謝所有。 – Josef

回答

-1

您可以嘗試使用其主機名來查找服務器。優點:與動態IP地址不同,主機名可能具有更長的有效性。在以下示例中,兩個網絡接口都可以引用同一主機。

byte[] b = { 10, 0, 0, 1 }; 

String name = "Hostname"; 

InetAddress ia = Inet4Address.getByAddress(b); 
InetAddress ia2 = Inet4Address.getByName(name); 

另一種可能的解決方案:在Android上使用網絡操作之前​​,你必須從Android清單相應的權限。我不知道到底,以下哪些是必備的:

<uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> 
+1

(1)這裏沒有任何回答實際問題的東西。 (2)關於動態API地址的問題沒有任何問題:實際上,問題顯示了一個*本地* IP地址。 (3)連接許可失敗也沒有。 -1 – EJP

+0

它不起作用。 @EJP是對的。 – Josef

0

有沒有什麼更好的方法來檢查,如果服務器在線

是。嘗試連接到它。這是一個可靠的測試。當然,直到你需要時纔去做。不要試圖預測未來。只需連接並處理失敗。

0

我試圖與這

 Socket socket = null; 
    boolean reachable = false; 
    try { 
     socket = new Socket("192.168.16.48", 80); 
     reachable = true; 
    } catch (UnknownHostException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     showAlertBox("Warning", "Server not available!"); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     showAlertBox("Warning", "Server not available!"); 
    } finally {    
     if (socket != null) try { socket.close(); } catch(IOException e) { } 
    } 

它的工作原理,但有時我得到meesage該應用程序沒有響應,即使套接字超時被調整。

+0

我不知道爲什麼當你有八小時考慮你不應該試圖預測未來的時候,你試過這個。只要嘗試在需要連接時建立連接*,並在當時處理失敗*無論如何你必須這樣做:爲什麼要處理兩次? – EJP