5

私は現在このコードを使用しています

    NSHost *host = [NSHost hostWithAddress:hostname];
if (host == nil) {
    host = [NSHost hostWithName:hostname];
    if (host == nil) {
        [self setMessage:@"Invalid IP address or hostname:"];
        return;
    }
}

作業中のネットワークアプリのIPアドレスを取得するためですが、NSHostが拒否されるプライベートAPIであることを認識しています。NSHostを使用せずに同じ結果を生成するためにこのコードを操作するのを手伝ってくれる人はいますか?どこから始めたらいいのかよくわかりません。

編集:

以下のほぼ完璧に見える提案に従って、上記のコードの代わりにこのコードをアプリに追加しました

    Boolean result;
CFHostRef hostRef;
CFArrayRef addresses;
NSString *hostname = @"www.apple.com";
hostRef = CFHostCreateWithName(kCFAllocatorDefault, (CFStringRef)hostname);
if (hostRef) {
    result = CFHostStartInfoResolution(hostRef, kCFHostAddresses, NULL); // pass an error instead of NULL here to find out why it failed
    if (result == TRUE) {
        addresses = CFHostGetAddressing(hostRef, &result);
    }
}
if (result == TRUE) {
    NSLog(@"Resolved");
} else {
    NSLog(@"Not resolved");
}

4行目を削除しましたが(すでに他の場所からこの情報を入手しているため)、CFHostRefが宣言されていないことに基づいてエラーが発生します。どうすれば解決できますか?他のエラーはその後hostRefを見ることができないことにのみ基づいているので、それは私の唯一の大きなハードルのようです。編集:kCFHostAddressesも宣言されていないことをスクラッチします。

4

3 に答える 3

6

CFHostを使用して同じことを実現できます。CFHostリファレンスの上部には、ルックアップを作成するためのクックブックレシピがあります。

次のコードは、非常に基本的な同期解決を実行します(上記のNSHostの場合と同様)。解決されるかタイムアウトになるまでアプリが戻らないため、アプリが応答しなくなる可能性があるため、これを行わないように注意してください。

代わりに非同期ルックアップを使用してください(上記のCFHostのドキュメントで説明されているCFHostSetClientおよびCFHostScheduleWithRunLoop)。また、実行する予定によっては、到達可能性APIの使用を検討することもできます。iPhone開発者のWebサイトで利用可能なネットワーキングに関するWWDCセッションを確認してください。

Boolean result;
CFHostRef hostRef;
CFArrayRef addresses;
NSString *hostname = @"www.apple.com";
hostRef = CFHostCreateWithName(kCFAllocatorDefault, (CFStringRef)hostname);
if (hostRef) {
    result = CFHostStartInfoResolution(hostRef, kCFHostAddresses, NULL); // pass an error instead of NULL here to find out why it failed
    if (result == TRUE) {
        addresses = CFHostGetAddressing(hostRef, &result);
    }
}
if (result == TRUE) {
    NSLog(@"Resolved");
} else {
    NSLog(@"Not resolved");
}

// Don't forget to release hostRef when you're done with it
于 2010-08-08T13:29:37.397 に答える
0

これを見てください:http://blog.zachwaugh.com/post/309927273/programmatically-retrieveing-ip-address-of-iphone

于 2010-08-08T13:32:45.660 に答える
-3

http://developer.apple.com/iphone/library/qa/qa2009/qa1652.html

開発者サポートシステムを通じて小さな答えを得ましたが、これは完全に機能しました。

于 2010-08-13T09:11:01.873 に答える