CocoaAsyncSocket連接服務(wù)器

公司需要使用socket連接server服務(wù)器來獲取所需要的數(shù)據(jù)骚露, 用以前的http代替县恕,github中又一個(gè)第三方框架CocoaAsyncSocket,里面含有了TCP/IP協(xié)議龙致,和UDP協(xié)議掰茶, 現(xiàn)在只需要TCP/IP,就可以只研究里面的代理方法作用橄抹。

一靴迫、導(dǎo)入CocoaAsyncSocket第三方庫

1、打開項(xiàng)目工程中的Pofile文件楼誓, 輸入 pod 'CocoaAsyncSocket'

2玉锌、打開終端 cd空格到當(dāng)前的項(xiàng)目工程路徑中

3、pod install安裝第三方庫

二連接服務(wù)器發(fā)送數(shù)據(jù)

1疟羹、創(chuàng)建一個(gè)socket

.h

@property (nonatomic, strong) GCDAsyncSocket *tcpServer;

.m

self.tcpServer =[[GCDAsyncSocket alloc]initWithDelegate:self delegateQueue:dispatch_get_main_queue()];

(記得簽署代理協(xié)議<GCDAsyncSocketDelegate>)

2主守、連接你的服務(wù)器,代碼如下

//錯(cuò)誤

NSError *error = nil;

//建立長鏈接發(fā)送心跳包

if (![self.tcpServer connectToHost:@"服務(wù)器地址" onPort:@"服務(wù)器端口" error:&error]) {

UIAlertController*alert = [UIAlertController alertControllerWithTitle:@"TCP錯(cuò)誤" message:error.localizedDescription preferredStyle:UIAlertControllerStyleAlert];

UIAlertAction* sure = [UIAlertAction actionWithTitle:@"確定" style:UIAlertActionStyleDefault

handler:nil];

[alert addAction:sure];

//失敗以后重新連接

[self disableUserInterfaceAfterConnected];

return;

}

UIAlertController*alert = [UIAlertController alertControllerWithTitle:@"TCP通道" message:@"通道連接成功" preferredStyle:UIAlertControllerStyleAlert];

UIAlertAction* sure = [UIAlertAction actionWithTitle:@"確定" style:UIAlertActionStyleDefault

handler:nil];

[alert addAction:sure];

[self presentViewController:alert animated:YES completion:nil];

[self disableUserInterfaceAfterConnected];

}

3榄融、連接成功代理回調(diào)

pragma mark -- TCP Delegate

//連接成功回調(diào)参淫,心跳計(jì)時(shí),定時(shí)向服務(wù)器發(fā)送請求愧杯,保持連接

  • (void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(uint16_t)port {

NSLog(@"socket連接成功");

}

成功連接以后涎才,我們可以獲取sockrt對象一個(gè)服務(wù)器的IP和端口,可以立馬處理執(zhí)行一些事情力九,也可以開啟心跳數(shù)據(jù)包耍铜,讓服務(wù)器一只可以確認(rèn)你的存在。

4跌前、向服務(wù)器發(fā)送SQL語句棕兼,在這里因?yàn)樾枰獙Πl(fā)送的數(shù)據(jù)進(jìn)行了轉(zhuǎn)碼和壓縮,代碼如下:

NSStringEncoding gbkEncoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);

//數(shù)據(jù)換成GBK

NSData* dataStream = [@"需要發(fā)送的SQL語句" dataUsingEncoding:gbkEncoding];

zipAndUnzip* zipTools = [[zipAndUnzip alloc]init];

// 壓縮后的數(shù)據(jù)dataZip

NSData* dataZip = [zipTools zlibDeflate:dataStream];

//向服務(wù)器發(fā)送內(nèi)容

[self.tcpServer writeData:dataZip withTimeout:1 tag:1];

5抵乓、務(wù)必記得伴挚,不管你要在此處做什么工作,都要加上一句話

[socket readDataWithTimeout:1 tag:1];

這句話意思就是調(diào)用讀取數(shù)據(jù)的代理方法灾炭。需要手動加入這句話章鲤,不然didReadData代理方法不執(zhí)行

/*

  • 兩個(gè)參數(shù)的意思 : timeOut :-1 。 永遠(yuǎn)不會超時(shí)

*tag: 該次讀取與其他讀取的標(biāo)志咆贬,通常我們在設(shè)計(jì)視圖上的控件時(shí)也會有這樣的一個(gè)屬性就是tag

*/

----現(xiàn)在我們連接動作算是完整的做完了, 接下來就是和服務(wù)器的交互處理了帚呼!也就是讀寫操作掏缎。 通訊畢竟是為了傳輸數(shù)據(jù)皱蹦。

三、讀取數(shù)據(jù)解析數(shù)據(jù)

1眷蜈、解析服務(wù)器向你返回的字符串---先解壓縮再轉(zhuǎn)碼

  • (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag {

//設(shè)置data收到的最大長度

[self.tcpServer readDataToLength:[GCDAsyncSocket CRLFData].length withTimeout:-1 tag:0];

//對得到的data值進(jìn)行解析與轉(zhuǎn)換

zipAndUnzip* zipTools = [[zipAndUnzip alloc]init];

// 壓縮后的數(shù)據(jù)dataZip

NSData* dataZip = [zipTools zlibInflate:data];

NSStringEncoding gbkEncoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);

NSString* readData = [[NSString alloc]initWithData:dataZip encoding:gbkEncoding];

//接下來 根據(jù)不同的需求解壓不同的數(shù)據(jù)

沪哺。。酌儒。辜妓。

}

參考鏈接: https://www.cnblogs.com/yyt-hehe-yyt/p/5284445.html

參考鏈接:

http://www.reibang.com/p/8ad92f31dbfb

有任何疑問或者技術(shù)大牛,請指點(diǎn)

qq郵箱:923782052@qq.cm

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末忌怎,一起剝皮案震驚了整個(gè)濱河市籍滴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌榴啸,老刑警劉巖孽惰,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異鸥印,居然都是意外死亡勋功,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進(jìn)店門库说,熙熙樓的掌柜王于貴愁眉苦臉地迎上來狂鞋,“玉大人,你說我怎么就攤上這事潜的∩ё幔” “怎么了?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵夏块,是天一觀的道長疏咐。 經(jīng)常有香客問我,道長脐供,這世上最難降的妖魔是什么浑塞? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮政己,結(jié)果婚禮上酌壕,老公的妹妹穿的比我還像新娘。我一直安慰自己歇由,他們只是感情好卵牍,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著沦泌,像睡著了一般糊昙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上谢谦,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天释牺,我揣著相機(jī)與錄音萝衩,去河邊找鬼。 笑死没咙,一個(gè)胖子當(dāng)著我的面吹牛猩谊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播祭刚,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼牌捷,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了涡驮?” 一聲冷哼從身側(cè)響起暗甥,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎遮怜,沒想到半個(gè)月后淋袖,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡锯梁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年即碗,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了客冈。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片断国。...
    茶點(diǎn)故事閱讀 40,110評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖匿乃,靈堂內(nèi)的尸體忽然破棺而出合敦,到底是詐尸還是另有隱情初橘,我是刑警寧澤,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布充岛,位于F島的核電站保檐,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏崔梗。R本人自食惡果不足惜夜只,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蒜魄。 院中可真熱鬧扔亥,春花似錦、人聲如沸谈为。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽伞鲫。三九已至粘茄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間秕脓,已是汗流浹背柒瓣。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工瘪菌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人嘹朗。 一個(gè)月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像诵肛,于是被迫代替她去往敵國和親屹培。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)載:http://www.cocoachina.com/ios/20170615/19529.html 參考:h...
    F麥子閱讀 4,011評論 3 2
  • iPhone的標(biāo)準(zhǔn)推薦是CFNetwork 庫編程怔檩,其封裝好的開源庫是 cocoa AsyncSocket庫褪秀,用它...
    Ethan_Struggle閱讀 2,245評論 2 12
  • 本人有若干成套學(xué)習(xí)視頻, 可試看! 可試看! 可試看, 重要的事情說三遍 包含Java, 數(shù)據(jù)結(jié)構(gòu)與算法, iOS...
    小冰山口閱讀 1,086評論 5 4
  • 多線程、特別是NSOperation 和 GCD 的內(nèi)部原理薛训。運(yùn)行時(shí)機(jī)制的原理和運(yùn)用場景媒吗。SDWebImage的原...
    LZM輪回閱讀 2,007評論 0 12
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)乙埃,斷路器闸英,智...
    卡卡羅2017閱讀 134,662評論 18 139