سؤال

أنا برمجة في الهدف - C لعدة أجهزة iPod وكنت أتساءل عن شيء ما. أقوم بتطوير تطبيق يستخدم طراز عميل الخادم وأستثيق بروتوكول UDP مع مآخذ C. هل هناك فئة تسمح لي بتحديد عنوان IP لأجهزة iPod؟ بعد googling حول منتديات أخرى، لم أجد أي شيء. من الواضح أن هذا الأمر لن يعمل، ولكن شيء مثل ipaddress = self.ip هو ما أدلى به في الاعتبار. أقوم بإعداد مآخذ C متعددة البث المتعدد وأحاول القيام بدوة يشبه أمر Ping، والذي من الواضح أنه غير موجود في الهدف - C إما أو معرفتي (وهو محدود، لأنني كنت فقط برمجة فقط في الهدف - ج منذ بداية هذا الصيف) على الأقل. أي نصيحة أو نصائح؟

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

المحلول

سيعود هذا القصاصات من التعليمات البرمجية عن طريق الحلقات عبر الواجهات.

- (NSString *)getIPAddress 
{
    NSString *address = @"error";
    struct ifaddrs *interfaces = NULL;
    struct ifaddrs *temp_addr = NULL;
    int success = 0;

    // retrieve the current interfaces - returns 0 on success
    success = getifaddrs(&interfaces);
    if (success == 0)  
    {
        // Loop through linked list of interfaces
        temp_addr = interfaces;
        while(temp_addr != NULL)  
        {
            if(temp_addr->ifa_addr->sa_family == AF_INET)
            {
                // Check if interface is en0 which is the wifi connection on the iPhone  
                if([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"])  
                {
                    // Get NSString from C String
                    address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)];
                }
            }
            temp_addr = temp_addr->ifa_next;
        }
    }

    // Free memory
    freeifaddrs(interfaces); 
    return address; 
} 

نصائح أخرى

هل رأيت هذا؟ http://www.appsamuck.com/day4.html.. وبعد أعتقد أن الإجابة الصحيحة هي استخدام CFHost في SDK.

تعديل
يبدو أن المصدر في هذا المشروع يستخدم التعليمات البرمجية التالية، مما يجعلها حل غير صالح تماما ما لم تقرر أبل وضع NSHost في SDK.

-(NSString*)getAddress {  
    char iphone_ip[255];  
    strcpy(iphone_ip,"127.0.0.1"); // if everything fails  
    NSHost* myhost =[NSHost currentHost];  
    if (myhost)  
    {  
        NSString *ad = [myhost address];  
        if (ad)  
            strcpy(iphone_ip,[ad cStringUsingEncoding: NSISOLatin1StringEncoding]);  
    }  
    return [NSString stringWithFormat:@"%s",iphone_ip];   
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top