サーバーに到達可能かどうかを確認したい。サーバの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位を確認する必要があります。
どうすればいいですか?
「Webサーバーデーモンがクラッシュした場合」 - なぜサーバーをチェックする必要があるのかという追加の理由があります。サーバーがダウンしている場合、その機能はサーバーによって異なりますので、私のアプリケーションは実行できません。だから私はサーバーがアプリケーションを実行し続けることを確認する必要があります。しかし、FOAの理由は、デバイスがローカルエリアWiFiのようなインターネットへの実際のアクセス権を持たないWiFiを使用しているかどうかを確認することです。だから私は、サーバーが到達可能であれば1番目を、2番目の場合はそれが応答すれば1番目を確認する必要があります。 – Stan
サーバが通常のhttpサーバ(サイトホスティングを意味する)でない場合はどうなりますか? APIの機能をいくつか維持しているだけです。 – Stan
そして、どんな場合でも、私はいくつかのファイルや何かを要求するのが好きではないため、サーバーがダウンしていると待機(タイムアウト時間)が発生します。そして今度は、リクエストが別のスレッドに入ってもアプリケーションはフリーズします。それはそれがサーバーからの応答を取得している間私は傾けることができますので、アプリでさらに行く(ログインなど)。 – Stan