[英]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.