2015-09-23 13 views
6

के बजाय आईपी असाइन किया गया है। मेरे पास एक सर्वर स्थानीय रूप से चल रहा है (मेरा आईपी 1 9 2.168.0.98 है) और इसे एक्सेस करने के लिए कुछ नेटवर्किंग कोड के साथ प्रयोग कर रहा है। मूल रूप से इस AFNetworking के माध्यम से किया गया था, लेकिन अब मैं एक NSURLSession इस तरह से यह किया है:NSURL सत्र विफल रहता है जब हमें स्थानीयहोस्ट या घर

NSURLSession *session = [NSURLSession sharedSession]; 
NSURL *url = [NSURL URLWithString:@"http://192.168.0.98:8080/api"]; 
NSURLSessionDataTask *task = [session dataTaskWithURL: url 
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { 
             NSLog(@"Error: %@", error); 
             NSLog(@"Body: %@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]); 
            }]; 
[task resume]; 

मैं तो यह इन 3 यूआरएल के साथ सामना किया है:

  • http://localhost:8080/api -> काम करता है।
  • http://127.0.0.1:8080/api -> काम करता है।
  • http://192.168.0.98:8080/api -> त्रुटि के साथ विफल:

    Error Domain=NSPOSIXErrorDomain 
    Code=2 "No such file or directory" 
    UserInfo={ 
        NSErrorFailingURLStringKey=http://192.168.0.98:8080/api, 
        NSErrorFailingURLKey=http://192.168.0.98:8080api, 
        _kCFStreamErrorCodeKey=2, 
        _kCFStreamErrorDomainKey=1 
    } 
    

कहाँ 192.168.0.98 आईपी इस मशीन को सौंपा गया है। यदि मैं इन यूआरएल को PAW या एक ब्राउज़र से चलाता हूं तो यह ठीक काम करता है। लेकिन एक इकाई परीक्षण से यह विफल रहता है।

मेरे प्रोजेक्ट के परिप्रेक्ष्य से मैं केवल localhost का उपयोग कर सकता हूं। तो यह एक सौदा ब्रेकर नहीं है। लेकिन मैं उत्सुक हूं कि यह क्यों काम नहीं कर रहा है।

क्या किसी को पता है कि समस्या क्या हो सकती है?

+2

अनुमान पर क्योंकि उस होस्ट को नहीं पहुंचाया जा सका था या उस पते पर पोर्ट 8080 पर कोई प्रक्रिया नहीं थी – Paulw11

+0

दरअसल; क्या आपने इसका परीक्षण 'टेलनेट' या 'नेटकैट' या कमांड लाइन से कुछ का उपयोग किया है? – trojanfoe

+0

मैंने इसका उपयोग एक आरईएसटी क्लाइंट का परीक्षण किया है और यह सभी यूआरएल के साथ ठीक है। वास्तव में यह मशीन 1 9 2.168.0.98 है। ट्रेस मार्ग 1 9 2.168.0.98, लोकलहोस्ट और 127.0.0.1 के लिए एक ही मार्ग दिखाता है। यह केवल AfNetworking है जिसके साथ कोई समस्या है। – drekka

उत्तर

5

tl; dr: अपने आईपी पते के बजाय अपने Bonjour local link डोमेन नाम का उपयोग करें।

मैं बस इस समस्या में खुद भाग गया। मैं स्थानीय रूप से एक एपीआई बना रहा हूं और अभी तक बाहरी सर्वर पर तैनाती नहीं करना चाहता हूं, लेकिन मुझे सिम्युलेटर और उपकरणों दोनों से एपीआई को कॉल करने की आवश्यकता है। मैंने पहले लोकहोस्ट का उपयोग करने की कोशिश की, लेकिन निश्चित रूप से यह डिवाइस के लिए काम नहीं करता है क्योंकि स्थानीयहोस्ट डिवाइस ही होगा, न कि मेरे मैक। आईपी ​​पता डिवाइस के लिए काम किया, लेकिन सिम्युलेटर में काम नहीं करता है। मुझे तब याद आया कि मैं अपने मैक के लिए अन्य नेटवर्किंग एड्रेसबिलिटी के लिए .local डोमेन नाम का उपयोग कर सकता हूं, और यह सुनिश्चित करता है कि यह पर्याप्त काम करता है। मैं सिम्युलेटर के साथ-साथ मेरे टेस्ट डिवाइस दोनों पर अपने एपीआई अनुरोधों के लिए बेस यूआरएल के रूप में http://mymac.local/ का उपयोग कर सकता हूं।

मुझे यकीन नहीं है कि वास्तविक आईपी पते का उपयोग क्यों नहीं करता है, लेकिन यह आपको एक विकल्प दे सकता है जो आपकी आवश्यकताओं के लिए काम करेगा।

+3

'सुडो स्कुटिल --get LocalHostName' आपके स्थानीय नाम को url में उपयोग करने के लिए देगा: http: //'localHostName'.local/ –

संबंधित मुद्दे