最近在做一款智能家居的APP,用到了udp和tcp,在網(wǎng)上搜了很多資料,基本上搜到的都是udp和tcp單獨(dú)使用的例子,還有tcp只針對(duì)一個(gè)設(shè)備連接的例子,所以很多沒(méi)有的功能需要自己嘗試各種方法來(lái)解決。比如udp和tcp一起使用,udp收到廣播以后直接進(jìn)行tcp連接,tcp同時(shí)針對(duì)多個(gè)設(shè)備進(jìn)行連接等問(wèn)題。
項(xiàng)目中用到了GCDAsyncUdpSocket框架,大家可以自己查閱相關(guān)資料
這里說(shuō)一下GCDAsyncUdpSocket這個(gè)框架中的GCDAsyncSocket,這個(gè)類(lèi)很神奇,如果把它設(shè)置為全局對(duì)象,那么針對(duì)連接多個(gè)設(shè)備的時(shí)候會(huì)容易出問(wèn)題,如果設(shè)置成局部對(duì)象,比如說(shuō)像下面這樣就會(huì)連接失敗。在項(xiàng)目中針對(duì)以上情況進(jìn)行了解決,雖然解決的思路不是太好,但是確實(shí)可以進(jìn)行多個(gè)設(shè)備進(jìn)行連接
GCDAsyncSocket *asyncsocket = [[GCDAsyncSocket alloc] init];
asyncsocket.delegate = self;
asyncsocket.delegateQueue = dispatch_get_main_queue();
由于代碼是從項(xiàng)目中抽出來(lái)的,所以在里面做了一些改動(dòng)。項(xiàng)目中還有很多細(xì)節(jié)沒(méi)有優(yōu)化,大家可以自己進(jìn)行優(yōu)化
下面是github地址
https://github.com/elite-kai/ELUdpTcp