2016-04-21 13 views
0

ローカルネットワーク上の特定のホストが "稼働中"であるかどうかを確認できます。Objective CでのIPアドレスの接続性/可用性のテスト

次のコード行は、ホストに到達できない場合にハングするため、実行する前にまずチェックを実行したいと考えています。

[_outputStream write:[data bytes] maxLength:[data length]]; 

私は、次のリンクに答えていると思いますが、私はここでCFHostCreateWithAddressはなくCFHostCreateWithName

Alternatives to NSHost in iPhone app

を使用する必要があると思うなクエリは、私がしようとしている何で私の試みですdo ...

Boolean result; 
struct sockaddr_in address; 

address.sin_family = AF_INET; 
address.sin_port = htons(80); 
inet_pton(AF_INET, "192.168.1.31", &address.sin_addr); 

CFDataRef sockData = CFDataCreate(NULL, &address, sizeof(address)); 
CFHostRef host = CFHostCreateWithAddress(NULL, sockData); 
result = CFHostStartInfoResolution(host, kCFHostAddresses, NULL); 

if (result == TRUE) { 
    NSLog(@"Resolved"); 
} else { 
    NSLog(@"Not resolved"); 
} 

ホストが起動しても解決されません。

以下はReachabilityクラスを使用しようとした私の試みです。私のコードは、指定されたアドレスにホストが存在しないにもかかわらず、以下のアドレスが到達可能であることを私に伝えています。

struct sockaddr_in address; 

address.sin_family = AF_INET; 
address.sin_port = htons(80); 
inet_pton(AF_INET, "192.168.1.31", &address.sin_addr); 

Reachability *reachability = [Reachability reachabilityWithAddress:&address]; 
NetworkStatus reachabilitytoHost = [reachability currentReachabilityStatus]; 
if(reachabilitytoHost != NotReachable) 
{ 
    NSLog(@"Reachable"); 
} 
else 
{ 
    NSLog(@"Not Reachable"); 
} 

答えて

0

はトニー百万到達可能性クラスを見てみましょう:https://github.com/tonymillion/Reachability

読む私から:

あなたは明らかにどんなアドレスをごwww.google.comを置き換えることができ
// Allocate a reachability object 
Reachability* reach = [Reachability reachabilityWithHostname:@"www.google.com"]; 

// Set the blocks 
reach.reachableBlock = ^(Reachability*reach) 
{ 
    // keep in mind this is called on a background thread 
    // and if you are updating the UI it needs to happen 
    // on the main thread, like this: 

    dispatch_async(dispatch_get_main_queue(), ^{ 
     NSLog(@"REACHABLE!"); 
    }); 
}; 

reach.unreachableBlock = ^(Reachability*reach) 
{ 
    NSLog(@"UNREACHABLE!"); 
}; 

// Start the notifier, which will cause the reachability object to retain itself! 
[reach startNotifier]; 

をテストしたい

+0

..注:Reachabilityは特定のホストに接続できるかどうかをアプリケーションに伝えることはできず、接続を許可する可能性のあるインターフェイスしか利用できないことを示しています。「基本的にReachabilityは指定されたアドレスにホストがあるそのホストへのルートが存在する場合は、それが有望なルートであることを示します。私はそれを試したときにこれを見つけたと確信しています。到達可能性は、指定されたアドレスにマシンがないのにホストに到達可能であることを伝えていました。 – Wayne

+0

Uhm、ok、その場合は、単にWKWebViewクラスを使用してみて、あなたが探しているURLを開こうとしましたか?デリゲートを使用して、エラー応答を出すかどうかを確認します。 – trdavidson

1

プロジェクトに到達可能性クラスを追加します。

#import "Reachability.h" 

また、SystemConfigurationフレームワークを追加します。ここ

Reachability *reachability = [Reachability reachabilityWithHostName:@"www.example.com"]; 
NetworkStatus reachabilitytoHost = [reachability currentReachabilityStatus]; 
if(reachabilitytoHost != NotReachable) 
{ 
    //reachable 
} 
else 
{ 
    // not reachable 
} 

チェックのサンプルコード:詳細情報についてhttps://developer.apple.com/library/ios/samplecode/Reachability/Introduction/Intro.html

:私は私が理解し、それは私が探しているまさにではないことを実現するまで到達可能性クラスを使用してみましたhttps://developer.apple.com/library/ios/samplecode/Reachability/Listings/Reachability_Reachability_h.html

+0

Reachabilityクラスを使用して、理解しているとおり、正確には私が探しているものではないことを認識しました。 "注意:特定のホストに接続できるかどうかは、到達可能性によってアプリケーションに伝えられません。接続を許可する可能性のあるインターフェイスがある」 基本的に、Reachabilityは指定されたアドレスにホストがあるかどうかを教えてくれません。存在する場合、そのホストへの有望なルートがあります。私はそれを試したときにこれを見つけたと確信しています。到達可能性は、指定されたアドレスにマシンがないのにホストに到達可能であることを伝えていました。 – Wayne

関連する問題