我想用 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 时,它​​正在工作。

最佳答案

请导入#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];

现在,每当您的 Internet 状态发生变化时,reachabilityChanged 方法都会通过可达性实例触发 :)
- (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;
            }
}

希望这可以帮助。

关于ios - reachabilityWithAddress 在 Objective C 编程中不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37742367/

10-12 14:45