문제

iPhone 앱에서 61616에 액세스하려고 노력하고 있으며 스크 검사 성 코드는 유효한 네트워크가 있음을 나타냅니다. 그러나 61616에 글을 쓰려고 할 시간이 있습니다. 누구나 알고 있습니까 :

A. iPhone Edge/3G 네트워크에 포트 범위가 제한되어 있거나이 포트에 연결할 수없는 경우?

B.이 포트에 대한 액세스를 명시 적으로 확인하는 방법. 다음은 "Foo.bar.com"을 확인하지만 "foo.bar.com:61616"을 확인하는 방법을 보여주지 않는 "네트워크 도달 가능한"코드 (Apple의 예에서 빌린)입니다.

모든 도움이 감사합니다!

- (BOOL)isDataSourceAvailable{
static BOOL checkNetwork = YES;
BOOL _isDataSourceAvailable = NO;
if (checkNetwork) { // Since checking the reachability of a host can be expensive, cache the result and perform the reachability check once.
    checkNetwork = NO;

    Boolean success;    
    const char *host_name = "foo.bar.com";

    SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(NULL, host_name);
    SCNetworkReachabilityFlags flags;
    success = SCNetworkReachabilityGetFlags(reachability, &flags);
    _isDataSourceAvailable = success && (flags & kSCNetworkFlagsReachable) && !(flags & kSCNetworkFlagsConnectionRequired);
    CFRelease(reachability);
}
return _isDataSourceAvailable;

}

도움이 되었습니까?

해결책

SCNETWORKERCHABILITY API는 주소를 라우팅 할 수 있는지 여부 만 확인합니다. 문서 인용 :

"도달 가능성"은 응용 프로그램에 의해 네트워크 스택으로 전송 된 데이터 패킷이 로컬 컴퓨터를 떠날 수 있는지 여부를 반영합니다. 도달 가능성은 데이터 패킷이 실제로 호스트가 수신 할 것이라고 보장하지는 않습니다.

이것은 NAT 또는 포트 제한과 관련이 없습니다. 라우팅은 포트가 아닌 주소를 기반으로합니다. 따라서 SCNETWORKERCHACHIBLED API를 통해 알 수있는 것은 이론적으로 기계의 인터페이스에 도달 할 수 있는지 여부입니다. 특정 포트에서 연결을 설정하려고하지 않습니다.

따라서 해당 서비스에 도달 할 수 있는지 알아 보려면 스스로 테스트해야합니다. 바람직하게는 SCNETWORKERCHABILITY API가 연결을 설정할 수 있음을 알려줍니다. 포트 61616의 서버에 연결하고 연결 또는 타임 아웃이 있는지 확인하십시오. 적절한 시간 초과 값과 처리가 중요합니다.

다른 팁

이것은 운송 업체에서 운송 업체뿐만 아니라 계약에 이르기까지 많이 다른 것입니다. 예를 들어, 영국에서 O2는 웹 주소 (아마도 포트 80 및 443이지만 확인하지 않았지만 확인하지 않았지만)에 대해서만 인터넷 액세스를 제한하지만 계약. (iPhone Payg 고객에게 조금 더 개방되기를 바랍니다.)

나는 이것의 실질적인 결과는 당신이 세계 어디에서나 높은 항구에 접근 할 수 없다는 것입니다.

특정 포트가 열려 있는지 확인하는 간단한 방법이 있는지 잘 모르겠습니다. 아마도 가장 좋은 옵션은 "합리적인"타임 아웃을 사용하는 것입니다. 물론, 시간 초과를 얻을 수있는 여러 가지 이유가 있으므로 오류가 적절한 모호해야합니다.

iPhone이 Edge/Mobile 위에 연결되어 있으면 NAT 게이트웨이 뒤에있을 수 있으므로 연락 할 수 없습니다. 적어도 그것은 T-Mobile 독일의 경우입니다. iPhone은 t-mobile (172.16.xx)에 의해 RFC IP 주소를 얻습니다.

로컬 Wi -Fi Net에 연결된 iPhone으로 테스트하고 가능하면 일반적으로 iPhone이 서버에 문의 한 다음 서버가 전화기와 통신 할 수있는 방식으로 앱을 설계합니다.

외부 시스템에서 iPhone에 연락하려고합니까?

그것은 작동하지 않을 것입니다. 일반적으로 GPRS/EDGE/UMTS 인프라는 들어오는 연결을 차단합니다. 그렇지 않으면 모바일 가입자에게 요청하지 않은 원치 않는 트래픽에 대해 청구 될 수 있습니다. (누군가가 다음 6 주 동안 아이폰을 한 번에 한 번 핑하는 사람을 상상해보십시오. 당신은 그것을 지불 할 것입니다 ...)

솔루션은 모바일 장치에서 원격 기계로 연결을 설정 한 다음 원격 기계가 트래픽에 사용하도록하는 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top