2010-08-08 19 views
5

मैं वर्तमान में मैं पर काम कर रहा हूँ एक नेटवर्किंग अनुप्रयोग के लिए मेरी आईपी पता पुनर्प्राप्त के लिए इस कोडवैकल्पिक

NSHost *host = [NSHost hostWithAddress:hostname]; 
if (host == nil) { 
    host = [NSHost hostWithName:hostname]; 
    if (host == nil) { 
     [self setMessage:@"Invalid IP address or hostname:"]; 
     return; 
    } 
} 

उपयोग कर रहा हूँ, फिर भी मुझे पता है कि NSHost एक निजी एपीआई है कर रहा हूँ कि खारिज कर दिया जाएगा। क्या कोई मुझे NSHost का उपयोग किये बिना एक ही परिणाम देने के लिए इस कोड को काम करने में मदद कर सकता है? मुझे सच में यकीन नहीं है कि कहां से शुरू करना है।

संपादित करें:

सुझाव है कि लानत के पास सही प्रतीत नीचे मैं ऊपर

Boolean result; 
CFHostRef hostRef; 
CFArrayRef addresses; 
NSString *hostname = @"www.apple.com"; 
hostRef = CFHostCreateWithName(kCFAllocatorDefault, (CFStringRef)hostname); 
if (hostRef) { 
    result = CFHostStartInfoResolution(hostRef, kCFHostAddresses, NULL); // pass an error instead of NULL here to find out why it failed 
    if (result == TRUE) { 
     addresses = CFHostGetAddressing(hostRef, &result); 
    } 
} 
if (result == TRUE) { 
    NSLog(@"Resolved"); 
} else { 
    NSLog(@"Not resolved"); 
} 

मैं 4 लाइन को हटा दिया है कोड के स्थान पर अपने ऐप्स में इस कोड को जोड़ दिया है के बाद (के रूप में मेरे पास यह जानकारी पहले से कहीं और है) लेकिन मुझे सीएफहोस्ट्रफ के आस-पास स्थित त्रुटियों के आधार पर त्रुटियां मिल रही हैं। मैं इसे कैसे हल करूं? ऐसा लगता है कि यह मेरी एकमात्र बड़ी बाधा है, क्योंकि अन्य त्रुटियां केवल उसके बाद होस्टरफ को देखने में सक्षम होने की कमी के आधार पर होती हैं। संपादित करें: स्क्रैच करें कि मुझे केसीएफहोस्ट एड्रेस भी मिलते हैं।

उत्तर

6

आप इसे प्राप्त करने के लिए CFHost का उपयोग कर सकते हैं। CFHost Reference के शीर्ष पर लुकअप बनाने के लिए एक कुकबुक रेसिपी है।

निम्नलिखित कोड बहुत है, बहुत बुनियादी सिंक्रोनस रिज़ॉल्यूशन (जैसा कि उपर्युक्त आपके ऊपर एनएसएचओस्ट होगा)। ध्यान दें कि आप ऐसा नहीं करना चाहते हैं क्योंकि यह आपके ऐप को उत्तरदायी प्रस्तुत कर सकता है क्योंकि यह हल होने तक या टाइमआउट हिट होने तक वापस नहीं आता है।

अतुल्यकालिक देखने का प्रयोग करें बजाय (CFHostSetClient और CFHostScheduleWithRunLoop ऊपर CFHost दस्तावेज़ में वर्णित)। इसके अलावा, आप जो करने की योजना बना रहे हैं उसके आधार पर, आप पहुंच योग्यता API का उपयोग करना चाह सकते हैं। आईफोन डेवलपर वेबसाइट पर उपलब्ध नेटवर्किंग पर डब्ल्यूडब्ल्यूडीसी सत्र देखें। इस पर

Boolean result; 
CFHostRef hostRef; 
CFArrayRef addresses; 
NSString *hostname = @"www.apple.com"; 
hostRef = CFHostCreateWithName(kCFAllocatorDefault, (CFStringRef)hostname); 
if (hostRef) { 
    result = CFHostStartInfoResolution(hostRef, kCFHostAddresses, NULL); // pass an error instead of NULL here to find out why it failed 
    if (result == TRUE) { 
     addresses = CFHostGetAddressing(hostRef, &result); 
    } 
} 
if (result == TRUE) { 
    NSLog(@"Resolved"); 
} else { 
    NSLog(@"Not resolved"); 
} 

// Don't forget to release hostRef when you're done with it 
+0

क्या आप विशिष्ट नुस्खा के लिए थोड़ा और दिशा प्रदान कर सकते हैं? मैं काफी समझ नहीं पा रहा हूं कि मैं किस चीज को देख रहा हूं (मिनट में मेरी मशीन के सामने बैठे नहीं, इसलिए यह देखने के लिए संघर्ष कर रहा था कि यह मेरे बाकी कोड के लिए कैसे है) – David26th

+0

एक बहुत ही सरल सिंक्रोनस उदाहरण के लिए ऊपर संपादित किया गया है (जिसे आप निश्चित रूप से तब तक उपयोग नहीं करना चाहिए जब तक कि आप अपना यूआई फ्रीज नहीं करना चाहते)। – puzzle

+0

बोनजोर विज्ञापन सेवाओं के लिए यह सहायक पाया। मैन्युअल रूप से दर्ज आईपी के लिए काम करने के लिए काफी कुछ नहीं मिल सकता है जो एनएसहोस्ट ने किया था। – David26th

0
+0

वोलोंगोंग इस कल को लागू करने पर विचार करता है जब मेरे पास मेरा लैपटॉप है। अब मेरी आईपैड रिंग पर काम करना। – David26th

+0

ध्यान दें कि यह आईफोन का अपना आईपी पता प्राप्त करने के लिए है, जबकि आप होस्ट नाम को हल करने की तलाश में हैं, कम से कम मैं आपके प्रश्न को कैसे पढ़ता हूं। – puzzle

+0

वास्तव में आप यहां कुछ xtina पर हो सकते हैं। सेब से अस्वीकृति प्राप्त करने के बाद मैंने केवल अपने कोड पर वापस देखा, इसलिए जांच करने की आवश्यकता हो सकती है। अगर मैं होस्टनाम को हल करना चाहता हूं तो मैं यह कैसे करूं? – David26th

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