2011-07-16 5 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를 사용하는지 확인하는 것이 었습니다. 그래서 서버가 모두 도달 할 수 있다면 첫 번째를 확인하고 두 번째는 응답해야합니다.
How2do it?

답변

0

서버에 연결할 수 있는지 확인하고 싶습니다.

그런 다음 실제 요청을하십시오. 예를 들어 웹 서버와 통신하려는 경우 웹 서버에서 robots.txt을 요청하십시오. 다른 방법으로는 신뢰할 수있는 방법이 없습니다. 예를 들어 웹 서버 데몬이 손상된 경우 기술이 작동하더라도 작동하지 않습니다.

+0

"웹 서버 데몬이 손상된 경우"- 그 이유는 내가 서버를 확인하고 싶은 추가 이유입니다. 서버가 다운되면 내 응용 프로그램은 서버에 따라 기능이 다르기 때문에 실행할 수 없습니다. 따라서 서버를 계속 실행하려면 앱이 필요합니다. 그러나 FOA의 이유는 장치가 일부 로컬 영역 WiFi와 같이 인터넷에 실제로 액세스 할 수없는 WiFi를 사용하는지 확인하는 것입니다. 그래서 서버가 모두 도달 할 수 있다면 첫 번째를 확인하고 두 번째는 응답해야합니다. – Stan

+0

서버가 일반 http 서버가 아닌 경우 (일부 사이트 호스팅을 의미)? 단지 일부 API 기능 만 유지합니다. – Stan

+0

그리고 어떤 경우에는 서버가 다운되면 대기 시간 (시간 초과 기간)이 발생할 일부 파일 또는 뭔가 원인을 요청하고 싶지 않습니다. 그리고 이번에는 요청이 별도의 스레드에서 실행되는 경우에도 앱이 중단됩니다. 서버에서 아무런 반응을 얻지 못하면서 앱에서 더 이상 움직이지 않기 때문에 (예를 들어 로그인). – Stan

관련 문제