الهدف - C - تحديد عنوان IP الخاص ب iPod Touch برمجيا
-
12-09-2019 - |
سؤال
أنا برمجة في الهدف - 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];
}