我想用ip检查服务器是否有效,例如 74.125.71.104(Google的IP)
//分配一个可达性对象
`struct sockaddr_in address;
address.sin_len = sizeof(address);
address.sin_family = AF_INET;
address.sin_port = htons(80);
address.sin_addr.s_addr = inet_addr("74.125.71.104");`
Reachability *reach = [Reachability reachabilityWithAddress:&address];
但那些不起作用。
当我更改为reachabilityWithHostname
时,它正在运行。
答案 0 :(得分:3)
请导入#include <arpa/inet.h>
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil];
struct sockaddr_in address;
address.sin_len = sizeof(address);
address.sin_family = AF_INET;
address.sin_port = htons(8080);
address.sin_addr.s_addr = inet_addr("216.58.199.174"); //google ip
self.internetReachability = [Reachability reachabilityWithAddress:&address];
[self.internetReachability startNotifier];
[self updateInterfaceWithReachability:self.internetReachability];
修改强>
根据您的评论,您的可访问性块不会被调用。我总是使用不太了解可达性块的通知。所以我更喜欢使用以下通知。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil];
struct sockaddr_in address;
address.sin_len = sizeof(address);
address.sin_family = AF_INET;
address.sin_port = htons(8080);
address.sin_addr.s_addr = inet_addr("216.58.199.174");
self.internetReachability = [Reachability reachabilityWithAddress:&address];
[self.internetReachability startNotifier];
[self updateInterfaceWithReachability:self.internetReachability];
现在,只要您的互联网状态发生变化,就会触发可更改性实例触发更改方法:)
- (void) reachabilityChanged:(NSNotification *)note {
Reachability* curReach = [note object];
[self updateInterfaceWithReachability:curReach];
}
最后将updateInterfaceWithReachability实现为
- (void)updateInterfaceWithReachability:(Reachability *)reachability {
NetworkStatus netStatus = [reachability currentReachabilityStatus];
switch (netStatus)
{
case NotReachable: {
//not reachable
}
break;
case ReachableViaWWAN:
case ReachableViaWiFi: {
//reachable via either 3g or wifi
}
break;
}
}
希望这有帮助。