2011-07-16 65 views
0


我想檢查服務器是否可訪問。在這裏找到一個例子來獲取服務器的IP作爲整數值。我試着去檢查它在以下方式(以活動):嘗試確保服務器可訪問時發生問題(HostReachable)

boolean s = isHostReachable(getString(R.string.server_address)); 

,但沒有運氣,它返回false,而

final int serverIP = getHostIPAsInt(getString(R.string.server_address)); 

始終返回值。下面是方法:

public static boolean isHostReachable(final String hostName){ 
    try { 
     return InetAddress.getByName(hostName).isReachable(255); 
    } catch (UnknownHostException e) { 
     return false; 
    } catch (IOException e){ 
     return false; 
    } 
} 

public static int getHostIPAsInt(final String hostname) { 
    final InetAddress inetAddress = getHostIP(hostname); 
    if (inetAddress==null) 
     return 0; 

    final byte[] addrBytes = inetAddress.getAddress(); 
    final int addr = (addrBytes[3]&0xff) << 24 
        | (addrBytes[2]&0xff) << 16 
        | (addrBytes[1]&0xff) << 8 
        | addrBytes[0]&0xff; 
    return addr; 

還我試着用同樣的結果如下:

 isInternetWiFi = cm.requestRouteToHost(ConnectivityManager.TYPE_WIFI, serverIP); 
     isInternetMobile = cm.requestRouteToHost(ConnectivityManager.TYPE_MOBILE, serverIP); 

都是即使我使用「google.com」假的。我有一種感覺,當serverIP是一個負值,它總是失敗......但InetAddress不使用serverIP,仍然返回false。
與模擬器(aos 2.2)一起嘗試。
我需要確保服務器繼續執行應用程序2應用程序的功能取決於服務器(客戶端/服務器應用程序)。但想法是檢查設備是否使用(通過連接)WiFi,這些WiFi沒有真正接入互聯網,比如某些局域WiFi。所以我需要檢查第一,如果服務器是可以在所有和第二 - 如果它響應。
How2do呢?

回答

0

我想檢查服務器是否可達。

然後提出一個真實的請求。例如,如果您嘗試與該Web服務器通信,則從Web服務器請求robots.txt。沒有其他東西可靠 - 例如,如果Web服務器守護進程崩潰,那麼即使它工作了,也不會有效。

+0

「如果Web服務器守護進程崩潰」 - 這就是我想檢查服務器的另一個原因。如果服務器關閉,我的應用程序無法運行,因爲它的功能取決於服務器。所以我需要確保服務器能夠繼續執行應用程序。但是FOA的原因是要檢查設備是否使用(通過WiFi連接),WiFi無法像某些局域WiFi那樣真正訪問互聯網。所以我需要檢查第一,如果服務器是可以在所有和第二 - 如果它響應。 – Stan

+0

如果服務器不是常規的http服務器(意思是某些網站託管)?它只是維護一些API功能。 – Stan

+0

在任何情況下,我不喜歡請求某些文件或因爲如果服務器關閉會導致等待(超時持續時間)。即使請求在單獨的線程中進行,所有這段時間的應用程序都會凍結。那是因爲我無法進一步在應用程序中,而沒有從服務器響應(例如登錄)。 – Stan

相關問題