1

私はゆっくりとネットワークのコーディングを学び、少し行き詰まりました。nasドライブのTXTレコードにアクセスすることで、次のように提供されるボリュームを確認できると思いました。

http://files.dns-sd.org/draft-cheshire-dnsext-dns-sd.txt

しかし、私がこのコードを実行すると:

browse = [[NSNetServiceBrowser alloc]init];
[browse setDelegate:self];
[browse searchForServicesOfType:@"_afpovertcp._tcp." inDomain:@"local"];

サービスの検索とコールバックの以下を設定するには:

-(void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didFindService:(NSNetService *)aNetService moreComing:(BOOL)moreComing
{
    NSLog(@"Found: %@",aNetService);
    CFNetServiceRef aCFNetRef;
    aCFNetRef = CFNetServiceCreate(kCFAllocatorDefault, (__bridge CFStringRef)[aNetService domain],(__bridge CFStringRef) [aNetService type], (__bridge CFStringRef)[aNetService name], 0);
    CFStreamError error;
    if (CFNetServiceResolveWithTimeout(aCFNetRef, timeOut, &error)) {
        NSLog(@"CFNET TXT: %@",CFNetServiceGetTXTData(aCFNetRef));
        }
    }
    NSLog(@"TXTRecord: %@",[NSNetService dictionaryFromTXTRecordData:[aNetService TXTRecordData]]);       
    if (!moreComing) {
        [browse stop];
        [refreshButton setEnabled:YES];
        [self reloadInputViews];
    }
}

nslog()行は、見つかったサービスのTXTレコードが空であることを示しています。

Found: <NSNetService 0x6a90fd0> local. _afpovertcp._tcp. myLocalSVR
CFNET TXT: <00>
TXTRecord: (null)

誰かが私がコードを正しく持っているかどうか、またはここのローカルNASにTXTレコードが含まれていないというだけであるかどうかを言うことができます-しかし、私が読んだことから、これはそうではないはずです。TXTレコードが咳をする前にサービスを解決する必要があることも読みましたが、それが実行されていることを望んでCFNetServiceResolveWithTimeout()いました...

ありがとう!

トッド。

4

2 に答える 2

1

リンク先のドキュメント(http://files.dns-sd.org/draft-cheshire-dnsext-dns-sd.txt)から、私の強調:

DNS-SD TXT レコードの目的は、サービスに関する少量の有用な追加情報を伝えることです。 サービスへの接続を有効に確立する前に
、クライアントがこの追加情報を取得する必要がないことが理想的です。適切に設計されたアプリケーション プロトコルの場合 、TXT レコードに情報がまったくない場合でも、 ホスト名、ポート番号、および使用されているプロトコルだけを知っていれば、 そのリッスン プロセスと通信し、実行することができるはずです。バージョンまたは機能のネゴシエーションにより、 サービス インスタンス のその他のオプションまたは機能が決定されます。たとえば、Appleファイリングに接続する場合






TCP 上のプロトコル (AFP) [AFP] サーバー。クライアントはサーバーとの
プロトコル交換を開始して、
サーバーが実装する AFP のバージョンと、使用可能なオプションの機能または機能
(存在する場合) を決定します。

共有を一覧表示するために、検出されたサーバーとの AFP セッションを確立することが適切であることを理解しています。

NAS の TXT レコードは次の方法で確認できますdns-sd -L

dns-sd -L name type domain
名前付きサービスに接続して使用するために必要な情報を検索して表示します。そのサービスが利用可能なマシンのホスト名、サービスがリッスンしているポート番号、(存在する場合) サービスのプロパティを説明する TXT レコード属性。

ローカル ネットワークで _afpovertcp クエリを実行すると、次のようになります。

$ dns-sd -L mir _afpovertcp._tcp. local.
Lookup mir._afpovertcp._tcp..local.
 1:14:40.948  mir._afpovertcp._tcp.local. can be reached at mir.local.:548 (interface 4) Flags: 1
 1:14:40.948  mir._afpovertcp._tcp.local. can be reached at mir.local.:548 (interface 5) Flags: 1
 1:14:40.948  mir._afpovertcp._tcp.local. can be reached at mir.local.:548 (interface 9) Flags: 1
 1:14:40.948  mir._afpovertcp._tcp.local. can be reached at mir.local.:548 (interface 10) Flags: 1
 1:14:40.948  mir._afpovertcp._tcp.local. can be reached at mir.local.:548 (interface 11) Flags: 1
 1:14:40.948  mir._afpovertcp._tcp.local. can be reached at mir.local.:548 (interface 12)

お役に立てれば。

于 2012-03-18T00:18:13.100 に答える
1

これは古い質問であることは知っていますが、自分で解決しました。

netServiceDidResolveAddress が呼び出されるまで、TXTRecordData は使用できません。例えば:

- (void)netServiceDidResolveAddress:(NSNetService *)service {

    NSData* data = [service TXTRecordData];
    NSDictionary* dict = [NSNetService dictionaryFromTXTRecordData:data];

didFindService ポイントでチェックしていますが、アドレスが解決される前の呼び出しは nil を返します。

于 2015-05-21T18:33:10.837 に答える