0

デスクトップ クライアントをローカル ネットワーク上の電話にアドバタイズする作業を行っています。私の電話は、Xcode 4.5.2 を搭載した 6.0.2 です。

デスクトップ アプリが正常に登録されていることはわかっています。これは、電話の Discovery アプリ ( Tildesoft による) がネットワーク上のサービスを表示しているためです (Wi-Fi の問題も除外されます)。

Apple アプリのサンプル、Bonjour Webをダウンロードしました。「_myservice._tcp」を見つけるデリゲートは起動しませんでしたが、ブラウジングの開始メソッドは起動します。

HHServices (DNSService をラップする)を使用してみましたが、ブラウジングの開始メソッドが起動している間、サービスが見つかったメソッドは起動しません。

自分のアプリでは、NSNetServiceBrowser を使ってみました。デリゲートを設定すると、「netServiceBrowserWillSearch」デリゲート メソッドが起動されますが、他に何も起こりません。

確認したい場合はコードを添付します。

ヘッダ:

#import <UIKit/UIKit.h>
@interface ClientFinder_ViewController : UIViewController<UITableViewDataSource, UITableViewDelegate,NSNetServiceBrowserDelegate>

@property (weak, nonatomic) IBOutlet UITableView *availableClientsTableView;


-(void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didFindDomain:(NSString *)domainString moreComing:(BOOL)moreComing;
-(void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didFindService:(NSNetService *)aNetService moreComing:(BOOL)moreComing;
-(void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didNotSearch:(NSDictionary *)errorDict;
-(void)netServiceBrowserDidStopSearch:(NSNetServiceBrowser *)aNetServiceBrowser;
-(void)netServiceBrowserWillSearch:(NSNetServiceBrowser *)aNetServiceBrowser;

@end

関連する実装:

- (void)viewDidLoad
{
    [super viewDidLoad];
    dictionaryFoundClients = [[NSMutableDictionary alloc] initWithCapacity:1];
    [self addLogoToNabar];
    [self listen];
}

-(void)listen{
    NSNetServiceBrowser *serviceBrowser = [NSNetServiceBrowser new];
    [serviceBrowser setDelegate:self];
    [self.netServiceBrowser searchForServicesOfType:TYPE inDomain:domain];
}


-(void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didFindDomain:(NSString *)domainString moreComing:(BOOL)moreComing{
    NSLog(@"aNetServiceBrowser didFindDomain");
}


-(void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didFindService:(NSNetService *)aNetService moreComing:(BOOL)moreComing{
    NSLog(@"aNetServiceBrowser didFindService");
    [dictionaryFoundClients setObject:aNetService forKey:aNetService.hostName];
    NSLog(@"Found service: %@ @ %@", aNetService.name, aNetService.hostName);
}

-(void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didNotSearch:(NSDictionary *)errorDict{
    NSLog(@"aNetServiceBrowser didNotSearch. Errors enumerated");
    for(int a=0; a< errorDict.count; a++){
        NSString *key = [[errorDict allKeys] objectAtIndex:a];
        NSString *val = [errorDict objectForKey:key];
        NSLog(@"%@: %@", key, val);
    }
}

-(void)netServiceBrowserDidStopSearch:(NSNetServiceBrowser *)aNetServiceBrowser{
    NSLog(@"netServiceBrowserDidStopSearch");
}

-(void)netServiceBrowserWillSearch:(NSNetServiceBrowser *)aNetServiceBrowser{
    NSLog(@"netServiceBrowserWillSearch");
}
4

2 に答える 2

0

これがすべてローカルの場合、searchForRegistrationDomains メソッドの代わりに searchForServicesOfType: メソッドを使用する必要があります。

-(void)listen{
  NSNetServiceBrowser *serviceBrowser = [NSNetServiceBrowser new];
  [serviceBrowser setDelegate:self];
  [serviceBrowser searchForServicesOfType:@"_your_service_type._tcp" inDomain:@""];;
}

「_your_service_type._tcp」は、デスクトップ アプリケーションがサービスをアドバタイズするときに使用するサービス タイプです。

于 2013-01-12T05:01:49.790 に答える
0

なぜそれが機能し始めたのかはわかりませんが、これが私の作業コードです:

    [self stopCurrentResolve];
    [self.netServiceBrowser stop];
    [self.services removeAllObjects];

    NSNetServiceBrowser *aNetServiceBrowser = [[NSNetServiceBrowser alloc] init];
    if(!aNetServiceBrowser) {
        // The NSNetServiceBrowser couldn't be allocated and initialized.
        return NO;
    }

    aNetServiceBrowser.delegate = self;
    self.netServiceBrowser = aNetServiceBrowser;
    [self.netServiceBrowser searchForServicesOfType:type inDomain:domain];
于 2013-01-14T17:48:26.933 に答える