2011-07-16 6 views
0


サーバーに到達可能かどうかを確認したい。サーバのIPを整数値として取得するための例をここに示します。 Imは(活動中)の方法を以下にそれを確認しようとしている:サーバーがアクセス可能であることを確認する際に問題が発生する(HostReachable)

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

は、常に値を返しながら

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

しかし運、それは、falseを返します。ここではメソッドです:

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" を使用している場合でもfalseです。私はserverIPが負の値であると感じています。それは常に失敗します...しかし、InetAddressはserverIPを使用せず、falseを返します。
エミュレータ(aos 2.2)で試してみてください。
2つのアプリの機能がサーバー(クライアント/サーバーアプリ)に依存しているため、サーバーがアプリの実行を継続できるようにする必要があります。しかし、このアイデアは、デバイスがローカルエリアWiFiのようなインターネットへの実際のアクセスを持たないWiFiを使用しているかどうかを確認することでした。だから私は、サーバーが到達可能であれば1位、2位には応答があれば1位を確認する必要があります。
どうすればいいですか?

答えて

0

サーバが到達可能かどうかを確認したいと思います。

実際のリクエストを行います。たとえば、Webサーバーと通信しようとしている場合は、Webサーバーからrobots.txtを要求します。他には信頼できるものはありません。たとえWebサーバーデーモンがクラッシュしたとしても、あなたのテクニックはうまくいきません。

+0

「Webサーバーデーモンがクラッシュした場合」 - なぜサーバーをチェックする必要があるのか​​という追加の理由があります。サーバーがダウンしている場合、その機能はサーバーによって異なりますので、私のアプリケーションは実行できません。だから私はサーバーがアプリケーションを実行し続けることを確認する必要があります。しかし、FOAの理由は、デバイスがローカルエリアWiFiのようなインターネットへの実際のアクセス権を持たないWiFiを使用しているかどうかを確認することです。だから私は、サーバーが到達可能であれば1番目を、2番目の場合はそれが応答すれば1番目を確認する必要があります。 – Stan

+0

サーバが通常のhttpサーバ(サイトホスティングを意味する)でない場合はどうなりますか? APIの機能をいくつか維持しているだけです。 – Stan

+0

そして、どんな場合でも、私はいくつかのファイルや何かを要求するのが好きではないため、サーバーがダウンしていると待機(タイムアウト時間)が発生します。そして今度は、リクエストが別のスレッドに入ってもアプリケーションはフリーズします。それはそれがサーバーからの応答を取得している間私は傾けることができますので、アプリでさらに行く(ログインなど)。 – Stan

関連する問題