如何通过单击按钮制作显示您的IP地址的GUI程序?请,没有困难的解释,我不久前刚刚开始了Cocoa.
谢谢,
凯文
您可以通过两种方式获取IP地址:
1-如果要获取当前使用的netwrok上的本地IP地址,可以使用以下方法检索它:
-(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) { // 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; }
2-如果你想获得外部IP地址,那么你需要使用以下方法:
-(NSString*)getIP { NSUInteger an_Integer; NSArray * ipItemsArray; NSString *externalIP; NSURL *iPURL = [NSURL URLWithString:@"http://www.dyndns.org/cgi-bin/check_ip.cgi"]; if (iPURL) { NSError *error = nil; NSString *theIpHtml = [NSString stringWithContentsOfURL:iPURL encoding:NSUTF8StringEncoding error:&error]; if (!error) { NSScanner *theScanner; NSString *text = nil; theScanner = [NSScanner scannerWithString:theIpHtml]; while ([theScanner isAtEnd] == NO) { // find start of tag [theScanner scanUpToString:@"<" intoString:NULL] ; // find end of tag [theScanner scanUpToString:@">" intoString:&text] ; // replace the found tag with a space //(you can filter multi-spaces out later if you wish) theIpHtml = [theIpHtml stringByReplacingOccurrencesOfString: [ NSString stringWithFormat:@"%@>", text] withString:@" "] ; ipItemsArray =[theIpHtml componentsSeparatedByString:@" "]; an_Integer=[ipItemsArray indexOfObject:@"Address:"]; externalIP =[ipItemsArray objectAtIndex: ++an_Integer]; } NSLog(@"%@",externalIP); } else { NSLog(@"Oops... g %d, %@", [error code], [error localizedDescription]); } } return externalIP; }
为了确定IP地址,我发现了 这一点.
至于将它变成一个Cocoa应用程序,NSTextField
在Interface Builder的主窗口中添加一个(标签),放入一个按钮,添加一个应用程序控制器(NSObject
你做的子类),放入插座和动作,做正确的连接,并在"获取IP"方法,输入该代码并设置标签的值stringValue
.
您可以使用[[NSHost currentHost] address]
,但它不会始终显示您喜欢的内容.例如,在我的系统上,它提供了我的IPv6地址.
编辑: 在我的系统上,[[[NSHost currentHost] addresses] objectAtIndex:0]
有我的IPv4地址.