2012-07-05 1 views
2

내가 인터넷 연결을 확인하기 위해 앱 개발자 라이브러리에서 Reachability를 사용하는 코드는 다음과 같습니다 :라우터를 열린 상태로 유지하면서 모뎀을 닫을 때 인터넷 연결을 감지하는 방법은 무엇입니까?

+(BOOL)reachable { 
Reachability *r = [Reachability reachabilityForInternetConnection]; 
NetworkStatus internetStatus = [r currentReachabilityStatus]; 

Reachability *r1 = [Reachability reachabilityForLocalWiFi]; 
NetworkStatus internetStatus1 = [r1 currentReachabilityStatus]; 

Reachability *r2 = [Reachability reachabilityWithHostName:FTPURL]; 
NetworkStatus internetStatus2 = [r2 currentReachabilityStatus]; 

DLog(@"%d,%d,%d",internetStatus,internetStatus1,internetStatus2); 

if(internetStatus != NotReachable && internetStatus1 != NotReachable && internetStatus2 != NotReachable) 
{ 
    return YES; 
} 

return NO; 

}

무선 랜을 사용할 수있는 경우, 세 가지 상태가 "연결 가능"으로 확신합니다. Wi-Fi를 수동으로 끄면 (네트워크 연결 플래그가 꺼짐) 세 가지 상태 모두가 "NOTReachable"입니다.

모뎀을 끄고 무선 라우터를 열어 두는 동안 (네트워크 연결 플래그가 켜짐). 인터넷에 접속할 수는 없지만 세 가지 상태는 모두 "도달 가능"상태입니다. 왜 이런 일이 일어나고이 UnReachable 상태를 어떻게 감지하는지 알고 싶습니다.

+0

동일한 문제가 있습니다. 왜 그런지 찾아 냈습니까?! –

답변

1

iPhone이 초소형 네트워크 (예 : 무선 LAN)와 인터넷 사이에 관계가 있는지 여부는 구분되지 않습니다. 확실히 말할 수있는 것은 그것이 TCP/IP 네트워크에 연결되어 있다는 것입니다. 네트워크가 얼마나 큰지 알 길이 없습니다.

특정 iPhone에서 서버에 연결할 수 있는지 확인하려면 연결을 시도해야합니다. 심지어 연결을 테스트하고 실제 데이터를 보내는 사이에는 사라질 수도 있습니다. 따라서 연결하기 전에 연결 여부를 테스트하든 관계없이 데이터 전송 중에 정상적으로 연결이 끊어지는 것을 처리해야합니다. 당신은 사전 검사를 거치지 않고 단지 거기에 있다고 가정하고 전송 오류를 처리하기위한 좋은 코드를 가질 수 있습니다.

관련 문제