亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

iOS-Apple零配置網絡協議Bonjour的使用?

2019-11-14 19:53:12
字體:
來源:轉載
供稿:網友

1.前言  

這段時間為了解決公司App的網絡離線需求,做了個Apple推出的零配置網絡協議Bonjour的Test,主要是為了解決iOS設備的ip獲取,之前是可以使用socket的廣播來實現,但是使用Apple推出的Bonjor相比會更加簡單和穩定。希望能對大家有點幫助,如果有什么地方有error也歡迎大家指出,互相學習。
 
這是之前寫過的一篇關于socket的blog——socket廣播
 

2.什么是Bonjour?能做些什么?  

相信沒有了解過Bonjour的朋友對這個東西會比較陌生,Bonjor如標題所言,是Apple退出的一種零配置網絡協議,Bonjour可以完成的工作主要是在缺少中心服務器的情況下解決IP獲取,名稱解析和服務發現這三個問題。
 

2.1 IP獲取  

在傳統網絡環境下,設備的IP地址通過兩種方式獲取,一種是靜態配置,通過手工方式為設備指定一個IP地址,一種是動態配置,設備通過路由器的DHCP服務獲得動態的IP地址。
在無中心服務器的網絡環境下,沒有中心服務器提供DHCP服務,用戶手工配置IP地址也很不方便,這就需要一種新的方式來幫助設備獲取IP地址,就是希望設備可以主動為自己指定一個可用的IP地址。
在IPV6環境下,IPV6協議本身就提供了設備自指定IP地址的能力,所以實現很簡單,直接使用IPV6的協議支持就可以了。
在IPV4環境下,Bonjour使用了隨機指定IP地址的方法,首先為設備隨機指定一個屬于本地網段的IP地址,然后檢查該地址在本地是否有沖突,如果有沖突就隨機生成另一個新的IP地址,直到找到可用IP地址為止。
 

2.2 名稱解析  

在傳統網絡環境下,名稱和IP地址的對應關系是通過DNS服務解析的。當一個設備需要訪問一個域名,如“www.saup.com”,設備將“www.saup.com”發給DNS服務器,服務器返回該域名對應的IP地址,設備再使用返回的IP地址對目標服務器進行訪問。
在沒有中心服務器的網絡環境中,沒有DNS服務器提供域名解析服務,名稱解析變成一個嚴重問題。針對這一問題,業界的解決方案是mDNS,中文叫“組播DNS”,在標準文檔RFC6762中定義。
“組播DNS”的原理很簡單,當一個設備需要解析一個名稱時,如“abc.local.”,這個設備通過UDP協議向本地網絡中的所有設備廣播一個消息,問誰是“abc.local”,本地網絡中如果有一個設備認為自己是“abc.local”,它就給出響應,說出自己的IP地址。
因為“組播DNS”基于UDP協議,采用廣播消息的方式,所以不需要一個中心服務器提供DNS解析服務就可以完成本地的名稱解析。
Bonjour也是基于mDNS協議的,不過Bonjour在mDNS協議上作了擴展,加強了設備響應“組播DNS”請求的能力。在Bonjour協議下,應用只需要對某個名稱進行注冊,就可以將響應“組播DNS”請求的工作交由底層處理。也就是說在Bonjour協議下,應用不需要偵聽本地網絡的“組播DNS”請求并進行響應,這些工作由底層系統完成。
為了區分全球域名和本地域名,mDNS協議使用“.local.”作為本地域名的根域名。
 

2.3 服務發現  

當一個提供服務的設備獲取IP地址,并自我指定一個域名后,其實還是不能滿足用戶的需求。因為用戶需要的是某種服務,如打印服務,web服務,用戶并不關心這些服務對應的服務器名稱和它的IP地址。
為了讓用戶更容易發現本地網絡中的各種服務,Bonjour為設備提供了服務發現的能力。
Bonjour提供的“服務發現”能力基于一個簡單直接的規定,就是提供服務的設備在按以下標準對服務進行注冊:“名稱.服務類型.傳輸協議類型.local.”,比如:“DamonWebServer._http._tcp.local.”,又比如“DummiesWebServer._http._tcp.local.”。
這樣,當一個設備使用希望查找http服務的時候,Bonjour會去查找本地網絡中注冊過的包含"_http"的服務,然后將結果返回給用戶選擇。這時用戶面對的是“DamonWebServer”和"DummiesWebServer",用戶可以不去關心到底這兩個web服務到底在那臺設備上,該設備的IP地址是什么。
 

3.Bonjour的使用?  

Bonjour的使用主要分為兩部分

3.1.Bonjour服務端注冊服務  

//首先我們需要使用到iOS SDK里的NSNetService類@PRoperty(strong,nonatomic)NSNetService*netService;
//初始化服務,指定服務的域,類型,名稱和端口   _netService = [[NSNetService alloc] initWithDomain:@"local." type:@"_http._tcp." name:@"DamonWebServer" port:5222];
//指定代理[_netServicesetDelegate:self];//發布注冊服務[_netService publish];
//NSNetServiceDelegate代理協議相關代理方法  按需求使用@protocolNSNetServiceBrowserDelegate <NSObject>@optional/* Sent to the NSNetServiceBrowser instance's delegate before the instance begins a search. The delegate will not receive this message if the instance is unable to begin a search. Instead, the delegate will receive the -netServiceBrowser:didNotSearch: message.*/- (void)netServiceBrowserWillSearch:(NSNetServiceBrowser*)aNetServiceBrowser;/* Sent to the NSNetServiceBrowser instance's delegate when the instance's previous running search request has stopped.*/- (void)netServiceBrowserDidStopSearch:(NSNetServiceBrowser*)aNetServiceBrowser;/* Sent to the NSNetServiceBrowser instance's delegate when an error in searching for domains or services has occurred. The error dictionary will contain two key/value pairs representing the error domain and code (see the NSNetServicesError enumeration above for error code constants). It is possible for an error to occur after a search has been started successfully.*/- (void)netServiceBrowser:(NSNetServiceBrowser*)aNetServiceBrowser didNotSearch:(NSDictionary*)errorDict;/* Sent to the NSNetServiceBrowser instance's delegate for each domain discovered. If there are more domains, moreComing will be YES. If for some reason handling discovered domains requires significant processing, accumulating domains until moreComing is NO and then doing the processing in bulk fashion may be desirable.*/- (void)netServiceBrowser:(NSNetServiceBrowser*)aNetServiceBrowser didFindDomain:(NSString*)domainString moreComing:(BOOL)moreComing;/* Sent to the NSNetServiceBrowser instance's delegate for each service discovered. If there are more services, moreComing will be YES. If for some reason handling discovered services requires significant processing, accumulating services until moreComing is NO and then doing the processing in bulk fashion may be desirable.*/- (void)netServiceBrowser:(NSNetServiceBrowser*)aNetServiceBrowser didFindService:(NSNetService*)aNetService moreComing:(BOOL)moreComing;/* Sent to the NSNetServiceBrowser instance's delegate when a previously discovered domain is no longer available.*/- (void)netServiceBrowser:(NSNetServiceBrowser*)aNetServiceBrowser didRemoveDomain:(NSString*)domainString moreComing:(BOOL)moreComing;/* Sent to the NSNetServiceBrowser instance's delegate when a previously discovered service is no longer published.*/- (void)netServiceBrowser:(NSNetServiceBrowser*)aNetServiceBrowser didRemoveService:(NSNetService*)aNetService moreComing:(BOOL)moreComing;

 3.2.Bonjour客戶端發現本地服務  

//客戶端主要使用的是iOS SDK里的NSNetServiceBrowser@property(strong,nonatomic)NSNetServiceBrowser*serverBrowser;@property(strong,nonatomic)NSMutableArray*servers;//NSNetService在客戶端用于解析@property(strong,nonatomic)NSNetService*netserver;//初始化NSNetServiceBrowser_serverBrowser= [[NSNetServiceBrowseralloc]init];//指定代理_serverBrowser.delegate = self;_servers = [NSMutableArrayarray];//查找服務接著使用NSNetServiceBrowser實例的searchForServicesOfType方法查找服務,方法中可以指定需要查找的服務類型和查找的域[_serverBrowsersearchForServicesOfType:@"_http._tcp."inDomain:@"local."];

NSNetServiceBrowserDelegate代理協議相關代理方法

注:客戶端可以通過NSNetService解析服務,解析成功后,可以獲得通訊的數據細節,如:IP地址、端口等信息。 
-//下面是幾個常用的代理方法
//即將解析服務,- (void)netServiceWillResolve:(NSNetService *)netService {       NSLog(@"netServiceWillResolve");   }//解析服務成功- (void)netServiceDidResolveAddress:(NSNetService *)netService {       NSLog(@"service ip:%@,------port:%d",netService.addresses,netService.port);       } //解析服務失敗,解析出錯- (void)netService:(NSNetService *)netService didNotResolve:(NSDictionary *)errorDict {       NSLog(@"didNotResolve: %@",errorDict);   }  //已發現服務- (void)netServiceBrowser:(NSNetServiceBrowser *)netServiceBrowser didFindService:(NSNetService *)netService moreComing:(BOOL)moreServicesComing{       NSLog(@"didFindService");    _netserver = netService;    _netserver.delegate = self;    //設置解析超時時間    [_netserverresolveWithTimeout:5.0];}

 

作者: 清澈Saup
出處: http://www.49028c.com/qingche/
本文版權歸作者和博客園共有,歡迎轉載,但必須保留此段聲明,且在文章頁面明顯位置給出原文連接。
 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
夜夜嗨av色综合久久久综合网| 日韩欧美在线播放| xxx成人少妇69| 另类美女黄大片| 久久精品国产成人精品| 国产精品久久久久久久天堂| 欧美剧在线观看| 国产精品国产福利国产秒拍| 一区二区欧美日韩视频| 日韩在线精品一区| 成人写真福利网| 欧美性猛交xxxx免费看久久久| 亚洲精品电影网站| 亚洲人成五月天| 清纯唯美日韩制服另类| 色综合色综合网色综合| 欧美裸体视频网站| 久久久久久久成人| 国产精品久久一区| 日韩av一区二区在线观看| 欧美激情视频免费观看| 日韩精品极品视频| 欧美一级高清免费| zzijzzij亚洲日本成熟少妇| 欧美日韩成人在线观看| 最新69国产成人精品视频免费| 亚洲天堂开心观看| 久久久久久久久久久免费精品| 一本大道亚洲视频| 国产日韩精品在线播放| 久久国产视频网站| 亚洲欧美国产制服动漫| 精品人伦一区二区三区蜜桃免费| 久久久久久久激情视频| 久久久成人av| 亚洲图片在区色| 国产精品久久久久久久久粉嫩av| 欧美精品第一页在线播放| 日本国产一区二区三区| 亚洲欧美日韩中文视频| 色悠悠国产精品| 午夜精品久久久久久99热| 日韩电影在线观看免费| 精品国产一区二区三区久久| 久久久电影免费观看完整版| 日韩女优人人人人射在线视频| 国产精品电影网| 欧美做受高潮电影o| 国产一区二区三区毛片| 国产精品网址在线| 欧美激情xxxxx| 色综合久久久久久中文网| 久久久噜噜噜久噜久久| 91成人性视频| 91成人免费观看网站| 69久久夜色精品国产69乱青草| 成人观看高清在线观看免费| 精品亚洲一区二区三区四区五区| 91精品国产亚洲| 亚洲欧美日韩在线高清直播| 精品久久久久久亚洲国产300| 伊人青青综合网站| 色综合久综合久久综合久鬼88| 欧美极品少妇xxxxⅹ免费视频| 亚洲欧美综合另类中字| 亚洲一区二区中文字幕| 日韩欧美高清在线视频| 一本色道久久88综合日韩精品| 91精品国产一区| 亚洲xxxxx电影| 日韩av日韩在线观看| 91久久精品国产91久久性色| 亚洲在线观看视频网站| 国产综合在线视频| 国产欧美 在线欧美| 日韩精品视频三区| 国产精品久久久久久五月尺| 中文字幕亚洲欧美日韩2019| 亚洲精品久久久久| 国产欧美日韩视频| 久久香蕉国产线看观看av| 亚洲一区二区国产| 亚洲美女激情视频| 国产精品久久久亚洲| 国模精品视频一区二区| 亚洲视频第一页| 色无极影院亚洲| 在线精品高清中文字幕| 91精品国产综合久久香蕉| 欧美精品一本久久男人的天堂| 最近2019中文字幕在线高清| 欧美小视频在线| 午夜精品在线观看| 国产精品免费网站| 日韩性xxxx爱| 国产日韩欧美影视| 欧美理论片在线观看| 中文字幕精品av| 18一19gay欧美视频网站| 国产精品高精视频免费| 九九热最新视频//这里只有精品| 久久频这里精品99香蕉| 国产精品99久久久久久人| 一区三区二区视频| 欧美激情一级欧美精品| 亚洲欧洲成视频免费观看| 中文在线不卡视频| 欧美日韩第一页| 国精产品一区一区三区有限在线| 亚洲伊人一本大道中文字幕| 在线成人一区二区| 国产精品扒开腿做| 国产精品一区二区久久久久| 亚洲精品视频在线播放| 午夜精品久久久久久久99热| 国产精品免费久久久久影院| 国产97在线|亚洲| 日韩av电影在线网| 国内精品模特av私拍在线观看| 久久久免费在线观看| 国产91免费观看| 国产欧亚日韩视频| 亚洲激情小视频| 欧美日韩福利在线观看| 日韩精品视频在线观看免费| 精品久久久久人成| 亚洲性线免费观看视频成熟| 国产成人精品国内自产拍免费看| 久久九九精品99国产精品| 欧美一级电影在线| 久久综合九色九九| 欧美电影院免费观看| 欧美午夜宅男影院在线观看| 中国人与牲禽动交精品| 亚洲在线观看视频网站| 日韩黄色高清视频| 亚洲精品成人久久久| 一个人看的www久久| 亚洲成av人影院在线观看| 国产精品999999| 国产成人综合精品在线| 午夜精品久久久久久久99热| 精品女厕一区二区三区| 久久久久久久久久久亚洲| 日韩成人xxxx| 国产精品美女久久久免费| 国产精品欧美激情在线播放| 国产成人精品久久二区二区| 性日韩欧美在线视频| 69av成年福利视频| 欧美日韩国产精品一区二区三区四区| 在线播放国产一区中文字幕剧情欧美| 日韩成人av网| 91亚洲精品一区二区| 国产精品久久久久久久久借妻| 色七七影院综合| 亚洲视频精品在线| 国产精品h片在线播放| 欧美成人精品在线播放| 亚洲色图在线观看| 在线免费观看羞羞视频一区二区| 国产在线拍偷自揄拍精品| 欧美性高跟鞋xxxxhd| 亚洲人成电影网站色www|