उद्देश्य सी में इंटरनेट कनेक्टिविटी की जांच

वोट
15

मैं निश्चित रूप से कोडिंग स्टैनफोर्ड iPhone के माध्यम से काम कर रहा है और वर्तमान में ट्विटर एपीआई में hooking। जब उपकरण वर्तमान में इंटरनेट से जुड़ा नहीं है के लिए जब प्रयोक्ता नाम अमान्य है के लिए एक, और एक अन्य: मुझे क्या करना चाहते हैं सही रूप में दो त्रुटि की स्थिति को संभालने के लिए है। जो दोनों स्थितियों के लिए मामला है - दुर्भाग्य से, के रूप में यह खड़ा है, सबसे अच्छा मैं समझ में आता है या नहीं, एपीआई से वापसी नहीं के बराबर है या नहीं है।

क्या मैं के लिए देख रहा हूँ एक पंक्ति या कोड है कि किसी भी दूरदराज के डेटा के लाने प्रयास करने से पहले एक कनेक्शन के लिए जाँच कर सकते हैं के दो है। मैं एप्पल प्रलेखन में छान-बीन कर सकता है, लेकिन मैं समझ: क्यों नहीं आप के लिए सवाल डाल मेरी लाभ के लिए लोग और शायद दूसरों की है कि?

अतिरिक्त जानकारी: ऑब्जेक्टिव-सी और XCode में iPhone SDK का उपयोग करना।

25/01/2009 को 16:53
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


8 जवाब

वोट
30

एप्पल के नमूना कोड पर एक नजर डालें। गम्यता परियोजना कैसे एक कनेक्शन का पता लगाने को दर्शाता है।

http://developer.apple.com/iphone/library/samplecode/Reachability/index.html

25/01/2009 को 17:35
का स्रोत उपयोगकर्ता

वोट
9

यही कारण है कि कोड काम करता है, लेकिन हमेशा वांछित परिणाम नहीं बनाता है।

तरीका है कि iPhone पर टीसीपी ढेर काम करता है क्या उम्मीद की जानी चाहिए से बहुत अलग है। "पहुँचता" कोड के साथ, कभी कभी एक नेटवर्क कनेक्शन मौजूद रहेंगे, लेकिन मज़बूती से पता चला नहीं किया जाएगा। हालांकि, MobileSafari तो शुरू करने "पहुँचता" कोड के साथ संपर्क की जाँच करने के लिए सही परिणाम में परिणाम होगा reattempting।

जिस तरह से है कि मैं नेटवर्क कनेक्टिविटी का निर्धारण करने में सबसे प्रभावी पाया है एक NSURLConnection जांच चलाने के लिए है जब आवेदन लोड, एक अलग थ्रेड में। एक यूआरएल है कि आप की तरह "हाँ" (यानी एचटीएमएल अपने सर्वर या कुछ और पर फ़ाइल) कुछ वापस आ जाएगी पता करने के लिए एक कॉल करें। तो यकीन है कि प्राप्त परिणाम स्थिर पाठ के बराबर है होने के लिए जाँच करें। इस तरह, आप जानते हैं कि NSURLConnection ढेर ठीक से बाहर तक पहुंच रहा है, के रूप में "पहुँचता" कोड है कि काफी लगातार काम नहीं करता है करने का विरोध किया।

10/05/2009 को 05:45
का स्रोत उपयोगकर्ता

वोट
9

आप त्रुटि कोड में पढ़ सकते हैं और सबसे अच्छा के रूप में आप कर सकते हैं प्रतिक्रिया करने के लिए की आवश्यकता होगी। मैं अनिवार्य रूप से यह क्या सेवा आप के साथ लेकिन delicious.com के साथ बातचीत कर रहे हैं मुझे बुरा उपयोगकर्ता / पासवर्ड जो यदि आप इसे देखो है के लिए त्रुटि -1012 पाने पर निर्भर हो सकता है इस के साथ कुछ अनुभव प्राप्त हुआ है

NSURLErrorUserCancelledAuthentication =     -1012,

हालांकि स्पष्ट रूप से है कि शब्दों भ्रामक है, हालांकि मैं लगातार खराब उपयोगकर्ता / पासवर्ड में डालने और उस त्रुटि कोड हो रही दोहराने कर सकते हैं। तकनीकी तौर पर iPhone इंटरनेट से कनेक्ट नहीं कभी नहीं है जब तक आप कुछ अजीब क्षेत्र है कि डेटा कनेक्शन के साथ समस्या है में हैं। मैं देख रहा हूँ भी उसमें कोई त्रुटि कोड है

NSURLErrorNotConnectedToInternet =      -1009,

मैं के माध्यम से जाना होगा NSURLError.h (और वहाँ उस तरह अधिक कर रहे हैं)

NSURLErrorUnsupportedURL =          -1002,
NSURLErrorCannotFindHost =          -1003,
NSURLErrorCannotConnectToHost =         -1004,
NSURLErrorNetworkConnectionLost =       -1005,

आदि...

तुम सब करने की जरूरत है आप में पारित कर दिया और जाँच NSError ऑब्जेक्ट के संदर्भ मिलता है यह बहुत की तरह त्रुटि कोड है

//NSError *returnedError

if([returnedError code] == kERROR_CODE_BAD_USERNAME_OR_PASSWORD)

लगातार कुछ मैं अपने स्रोत कोड में परिभाषित किया है अनिवार्य रूप -1012 है

25/01/2009 को 17:31
का स्रोत उपयोगकर्ता

वोट
8

यह मेरे लिए काम करता है और सेब भूकंपीय एक्सएमएल परियोजना से लिया जाता है:

- (BOOL)isDataSourceAvailable
{
    static BOOL checkNetwork = YES;
    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 = "twitter.com"; // your data source host name

        SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(NULL, host_name);
        SCNetworkReachabilityFlags flags;
        success = SCNetworkReachabilityGetFlags(reachability, &flags);
        _isDataSourceAvailable = success && (flags & kSCNetworkFlagsReachable) && !(flags & kSCNetworkFlagsConnectionRequired);
        CFRelease(reachability);
    }
    return _isDataSourceAvailable;
}
26/03/2009 को 16:18
का स्रोत उपयोगकर्ता

वोट
3

गम्यता अलग वर्ग के माध्यम से आप कोड का उपयोग कर सकते है

   Reachability *curReach = [Reachability reachabilityForInternetConnection];
NetworkStatus netStatus = [curReach currentReachabilityStatus];
switch (netStatus)
{
    case NotReachable:
    {
        UIAlertView *connectionAlert = [[UIAlertView alloc] init];
        [connectionAlert setTitle:@"Error"];
        [connectionAlert setMessage:@"Please check your network connection."];
        [connectionAlert setDelegate:self];
        [connectionAlert setTag:1];
        [connectionAlert addButtonWithTitle:@"Back"];
        [connectionAlert show];

        break;
    }
    case ReachableViaWWAN:
    {


    }
    case ReachableViaWiFi:
    {
    }
}
20/08/2013 को 06:40
का स्रोत उपयोगकर्ता

वोट
2
-(BOOL)returnInternetConnectionStatus{
    ReachabilityLattest *reach = [ReachabilityLattest reachabilityForInternetConnection];
    NetworkStatus internetStatus = [reach currentReachabilityStatus];
    if ((internetStatus != NotReachable)) {
        return TRUE;
    } else {
        return FALSE;
    }
}
14/08/2012 को 07:40
का स्रोत उपयोगकर्ता

वोट
2

ध्यान रखें कि आप अपने आप को इंटरनेट से जुड़ा हुआ जा रहा है बिना WWAN (ReachableViaWWAN) या WiFi (ReachableViaWiFi) के माध्यम से जोड़ा जा रहा प्राप्त कर सकते हैं यहां तक ​​कि जब आप (एक कैशिंग google.com या apple.com जैसे कुछ मेजबान शायद तक पहुँचने की कोशिश में उपयोग करते समय एप्पल के गम्यता भालू मुद्दा)। कम से कम मेरे मामले में सबसे अच्छा समाधान - मैं अपने खुद के सर्वर कॉल करके और अंकों वापस पाने समाप्त हो गया।

18/05/2011 को 11:40
का स्रोत उपयोगकर्ता

वोट
2

क्या अपने वर्तमान कनेक्शन कोड दिखते है? आप उपयोग कर रहे हैं NSURLConnection +sendSynchronousRequest:returningResponse:error:, तो आप सिर्फ एक NSError चर का पता गुजरती हैं और जाँच करें कि उसके बाद की जरूरत है; साथ connectionWithRequest:delegate:, आप को लागू करना चाहिए -connection:didFailWithError:प्रतिनिधि में।

25/01/2009 को 16:59
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more