1

WIFI 로컬 연결이 있는지 간단히 테스트 할 수 있는지 알고 있습니까? 예를 들어 url 192.168.0.100에 도달 할 수있는 경우입니다. Reachability를 성공하지 못하게 시도했습니다. 그것은 연결되어 있다고 말해 주지만 사실이 아닙니다. 사전에코드에 로컬 Wi-Fi 연결을 IP (예 : 192.168.0.100)로 테스트하는 방법은 무엇입니까?

- (void)callWebService:(NSString *)url withBytes:(NSString *) bytes //GET 
{ 
     NSMutableURLRequest* request = [[NSMutableURLRequest alloc] init]; 
     NSString *url_string = [bytes stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]; 
     [request setURL:[NSURL URLWithString:[url stringByAppendingString: url_string]]]; 
     [request setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData]; 
     [request setTimeoutInterval:timeOut]; 
     NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self]; //try NSURLSession 
     [connection start]; 
} 

감사 :이 로컬 와이파이 연결하고, 나는 연결이 확신 할 때 다음, 해당 웹 서비스를 시작하는 경우

내가 테스트를 먼저하고 싶습니다.

+0

192.168.0.100은 URL이 아닙니다. 주소가 도달 할 수 있지만 HTTP 서비스가 수신되지 않는 것은 전적으로 가능합니다. –

+0

그 주소가 200을 반환하는 것을 알고, 내가 404를 반환하는 192.168.0.101과 같은 존재하지 않는 몇 가지를 넣으면.하지만 Reachability를 사용하면 매번 YES를 반환합니다. 그래서 그 상태 코드를 갖는 방법이 있는지 알고 싶습니다. 비동기 nsurl 연결을 시도했지만 작동하지만 문제는 connectionDidFinishLoading => http://stackoverflow.com/questions/42490047/connectiondidfinishloading-not-called-with-the-use-of를 실행하지 않는다는 것입니다. -nsurlconnection-sendasyn/42490402? noredirect = 1 # comment72129076_42490402 – Claudio

답변

1

NSURLConection에는 많은 대리자 메서드가 있습니다. 다음 중 하나를 수행하십시오

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 
{ 
    [self.download_connection cancel]; // optional depend on what you want to achieve. 
    self.download_connection = nil; // optional 

    DDLogVerbose(@"Connection Failed with error: %@", [error description]); 
} 

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
{ 
    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response; 
    NSInteger state = [httpResponse statusCode]; 

    if (state >= 400 && state < 600) 
    { 
     // something wrong happen. 
     [self.download_connection cancel]; // optional 
     self.download_connection = nil; // optional 
    } 
} 
2

당신이 애플의 Reachability을 사용합니다 인터넷 연결을 테스트합니다. ReachableViaWiFi 열거 형을 사용하여 연결 가능성을 확인하십시오.

그런 다음 서버에 대해 ping을 수행해야합니다. didReceiveResponse 방법에서는 서버의 성공적인 도달 범위를 검색해야합니다.

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
{ 
    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response; 
    NSInteger status = [httpResponse statusCode]; 

    if (status >= 200 && status <300) 
    { 
     // You are able to reach the server. Do something. 
    } 
} 

편집

당신이 startNotifier에 도달을 통지하는 것을 잊지하는 일이 있었나요 "나는 성공없이 도달 가능성과 시도"?

Reachability *reachability = [Reachability reachabilityWithHostname:@"www.google.com"]; 

reachability.reachableBlock = ^(Reachability *reachability) { 
    NSLog(@"Network is reachable."); 
}; 

reachability.unreachableBlock = ^(Reachability *reachability) { 
    NSLog(@"Network is unreachable."); 
}; 

// Start Monitoring 
[reachability startNotifier]; 
+0

감사합니다. 비동기 메서드가있는 방법이 있다고 생각합니다. 도달 가능성은 로컬 상태 코드를 확인하는 좋은 방법이 아닙니다. – Claudio

+1

예 도달 가능성은 응답이 200인지 여부를 알려주지 않습니다. 네트워크 연결을 결정하기위한 유틸리티 클래스 일 뿐이므로 응답을 받기 위해 전화를 걸 수 있습니다. –