先新建一个NSObject的分类GetIP,建好相应的文件以后,相应的文件的内容如下:
// NSObject+GetIP.h文件内容
#import <Foundation/Foundation.h>
@interface NSObject (GetIP)
+ (NSString *)deviceIPAdress;
@end
// NSObject+GetIP.m文件内容
#import "NSObject+GetIP.h"
#include <ifaddrs.h>
#include <arpa/inet.h>
@implementation NSObject (GetIP)
//必须在有网的情况下才能获取手机的IP地址
+ (NSString *)deviceIPAdress {
NSString *address = @"an error occurred when obtaining ip address";
struct ifaddrs *interfaces = NULL;
struct ifaddrs *temp_addr = NULL;
int success = 0;
success = getifaddrs(&interfaces);
if (success == 0) { // 0 表示获取成功
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;
}
}
freeifaddrs(interfaces);
NSLog(@"手机的IP是:%@", address);
return address;
}
@end
这样就封装好一个获取IP地址的第三方库
最后,根据需要调取相应的的接口。
例如,要调用相应接口,先导入相应的头文件#import "NSObject+GetIP.h"
NSString * StringIP = [NSString deviceIPAdress];
NSLog(@"%@",StringIP)即可打印出相应iphone或iPad的IP地址。