簡體   English   中英

iOS6中的Bonjour NSNetServiceBrowser無法正常工作

[英]Bonjour NSNetServiceBrowser in iOS6 Not working

我正在為桌面客戶端向本地網絡上的手機做廣告。 我的手機的Xcode為4.0.2,版本為6.0.2。

我知道桌面應用程序已成功注冊,因為我手機上的Discovery應用程序( 由Tildesoft提供 )在網絡上顯示了我的服務(這也排除了wifi問題)。

我已經下載了Apple應用示例Bonjour Web 查找“ _myservice._tcp”的委托從未觸發過,但是啟動瀏覽方法確實觸發了。

我嘗試使用HHServices (包裝了DNSService ),並且啟動了“開始瀏覽”方法時,“ service found”方法未觸發。

在我自己的應用程序中 ,我嘗試使用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");
}

如果這全部是本地的,則需要使用searchForServicesOfType:方法而不是searchForRegistrationDomains方法。

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

“ _your_service_type._tcp”是桌面應用程序發布其服務時正在使用的服務類型。

不知道為什么它開始工作,但是這是我的工作代碼:

    [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];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM