سؤال

أنا أستخدم هذا الرمز حاليًا

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

لاستعادة عنوان IP الخاص بي لتطبيق الشبكات الذي أعمل عليه ، لكنني أدرك أن 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");
}

لقد قمت بإزالة السطر الرابع (بما أن لدي هذه المعلومات من مكان آخر بالفعل) ، لكنني أحصل على أخطاء تعتمد حول CFHOSTREF غير معلمة. كيف يمكنني حل ذلك؟ يبدو أن هذه العقبة الكبيرة الوحيدة ، حيث أن الأخطاء الأخرى تستند فقط إلى عدم القدرة على رؤية Hostref بعد ذلك. تحرير: خدش أن أحصل أيضًا على kcfhostaddresses غير معلمة.

هل كانت مفيدة؟

المحلول 3

http://developer.apple.com/iphone/library/qa/qa2009/qa1652.html

حصلت على إجابة صغيرة رائعة من خلال نظام دعم المطورين ، هذا عمل بشكل مثالي.

نصائح أخرى

يمكنك استخدام CFHOST لتحقيق الشيء نفسه. في الجزء العلوي من مرجع CFHOST هي وصفة كتاب طبخ لإجراء البحث.

الكود التالي يفعل جدا ، قرار متزامن أساسي للغاية (كما هو الحال أعلاه مع nshost). لاحظ أن لا تريد القيام بذلك لأنه يمكن أن يجعل تطبيقك غير مستجيب لأنه لا يعود حتى يتم حله أو يضرب المهلة.

استخدم البحث غير المتزامن بدلاً من ذلك (cfhostsetclient و cfhostschedulewithrunloop كما هو موضح في وثائق cfhost أعلاه). أيضًا ، بناءً على ما تخطط للقيام به ، قد ترغب في البحث في استخدام واجهات برمجة التطبيقات القابلية للوصول. تحقق من جلسات WWDC على الشبكات المتوفرة على موقع مطور iPhone.

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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top