我想檢查服務器是否可訪問。在這裏找到一個例子來獲取服務器的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呢?
「如果Web服務器守護進程崩潰」 - 這就是我想檢查服務器的另一個原因。如果服務器關閉,我的應用程序無法運行,因爲它的功能取決於服務器。所以我需要確保服務器能夠繼續執行應用程序。但是FOA的原因是要檢查設備是否使用(通過WiFi連接),WiFi無法像某些局域WiFi那樣真正訪問互聯網。所以我需要檢查第一,如果服務器是可以在所有和第二 - 如果它響應。 – Stan
如果服務器不是常規的http服務器(意思是某些網站託管)?它只是維護一些API功能。 – Stan
在任何情況下,我不喜歡請求某些文件或因爲如果服務器關閉會導致等待(超時持續時間)。即使請求在單獨的線程中進行,所有這段時間的應用程序都會凍結。那是因爲我無法進一步在應用程序中,而沒有從服務器響應(例如登錄)。 – Stan