iOS之GCDAsyncSocket(TCP)

上周周末的時候發(fā)燒了辜羊,就擔(dān)誤了寫博客刽射,這周就多寫點吧轻掩。

這次主要講下Socket,關(guān)于它的三次握手织咧、四次揮手什么的已經(jīng)寫的很多了,也寫的很好,我就不寫了。但注釋代碼時會穿插些Socket原理進去,當(dāng)然也會提供Demo漠秋。

TCP Socket Server

#import "GCDAysncSocket.h"遵守協(xié)議<GCDAsyncSocketDelegate>

創(chuàng)建一個socket:
self.serverSocket = [[GCDAsyncSocket alloc]initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
監(jiān)聽端口:
    NSError * error = nil;
    [self.serverSocket acceptOnPort:[self.portTextField.text integerValue] error:&error];
等待連接://此為GCDAsyncSocket代理方法
- (void)socket:(GCDAsyncSocket *)sock didAcceptNewSocket:(GCDAsyncSocket *)newSocket
{
    //這里需要對Socket的工作原理進行一點解釋笙蒙,當(dāng)Socket accept一個連接服務(wù)請求時,將生成一個新的Socket庆锦,即此處的newSocket捅位。在此可查看newSocket.connectedHost和newSocket.connectedPort等參數(shù),并通過新的socket向客戶端發(fā)送一包數(shù)據(jù)后會關(guān)閉你一開始創(chuàng)建的socket(self.serverSocket),接下來你都將使用newSocket(我將此保存為self.clientSocket)
    self.clientSocket = newSocket;
}
連接失斅恪://此為GCDAsyncSocket代理方法
- (void)socketDidDisconnect:(GCDAsyncSocket *)sock withError:(NSError *)err;
{
    NSLog(@"連接失敗,要怎么做,你自己看著辦吧");
}
連接成功艇搀,發(fā)送數(shù)據(jù)
//注意此處使用的是上面的newSocket
[self.clientSocket writeData:[self.sendTextView.text dataUsingEncoding:NSUTF8StringEncoding] withTimeout:-1 tag:0];
    //我創(chuàng)建了一個Socket單例,這里只討論Socket,單例創(chuàng)建可看Demo
    SocketManager * socketManager = [SocketManager sharedSocketManager];
    [socketManager.mySocket readDataWithTimeout:-1 tag:0];
對發(fā)送的數(shù)據(jù)根據(jù)tag進行管理://此為GCDAsyncSocket代理方法
- (void)socket:(GCDAsyncSocket *)sock didWriteDataWithTag:(long)tag
{
    NSLog(@"可通過參數(shù)中的tag值管理發(fā)送的數(shù)據(jù)求晶,想怎么管理焰雕,您看著辦");
}
連接成功,接收數(shù)據(jù)
    //同樣使用的是newSocket
    [self.clientSocket readDataWithTimeout:-1 tag:0];
接收數(shù)據(jù)成功芳杏,處理數(shù)據(jù)://此為GCDAsyncSocket代理方法
- (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag
{
    NSLog(@"接收到消息%@,要怎么處理矩屁,您看著辦",data);
}

這是服務(wù)器Demo,歡迎大家Star


TCP Socket Client

#import "GCDAysncSocket.h"遵守協(xié)議<GCDAsyncSocketDelegate>

創(chuàng)建Socket:
self.clientSocket = [[GCDAsyncSocket alloc]initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
連接服務(wù)器:
    NSError * error = nil;
    [self.clientSocket connectToHost:self.ipTextField.text onPort:[self.portTextField.text integerValue] error:&error];
連接成功://此處為GCDAsyncSocket代理方法
- (void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(uint16_t)port
{
    //創(chuàng)建的socket單例
    SocketManager * socketManager = [SocketManager sharedSocketManager];
    socketManager.mySocket = sock;
}
連接失斁粽浴://此處為GCDAsyncSocket代理方法
- (void)socketDidDisconnect:(GCDAsyncSocket *)sock withError:(NSError *)err
{
    NSLog(@"自己看著辦");
}
連接成功档插,發(fā)送數(shù)據(jù)
    [self.clientSocket writeData:[self.sendTextView.text dataUsingEncoding:NSUTF8StringEncoding] withTimeout:-1 tag:0];
連接成功,接收數(shù)據(jù)
    [self.clientSocket readDataWithTimeout:-1 tag:0];
接收數(shù)據(jù)成功亚再,處理數(shù)據(jù)://此處為GCDAsyncSocket代理方法
- (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag
{
    NSLog(@"接收到消息%@,要怎么處理,您看著辦",data);
}

到此處就結(jié)束了晨抡,大家可以發(fā)現(xiàn)氛悬,客戶端這邊從頭到尾都是使用的一個Socket,并沒有出現(xiàn)新的Socket,這一點是需要注意的耘柱。客戶端Demo,歡迎大家Star.

版權(quán)聲明:本文為 Crazy Steven 原創(chuàng)出品如捅,歡迎轉(zhuǎn)載,轉(zhuǎn)載時請注明出處调煎!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末镜遣,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子士袄,更是在濱河造成了極大的恐慌悲关,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件娄柳,死亡現(xiàn)場離奇詭異寓辱,居然都是意外死亡,警方通過查閱死者的電腦和手機赤拒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門秫筏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來诱鞠,“玉大人,你說我怎么就攤上這事这敬『蕉幔” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵崔涂,是天一觀的道長阳掐。 經(jīng)常有香客問我,道長堪伍,這世上最難降的妖魔是什么锚烦? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮帝雇,結(jié)果婚禮上涮俄,老公的妹妹穿的比我還像新娘。我一直安慰自己尸闸,他們只是感情好彻亲,可當(dāng)我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著吮廉,像睡著了一般苞尝。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上宦芦,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天宙址,我揣著相機與錄音,去河邊找鬼调卑。 笑死抡砂,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的恬涧。 我是一名探鬼主播注益,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼溯捆!你這毒婦竟也來了丑搔?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤提揍,失蹤者是張志新(化名)和其女友劉穎啤月,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體碳锈,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡顽冶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了售碳。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片强重。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡绞呈,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出间景,到底是詐尸還是另有隱情佃声,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布倘要,位于F島的核電站圾亏,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏封拧。R本人自食惡果不足惜志鹃,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望泽西。 院中可真熱鬧曹铃,春花似錦、人聲如沸捧杉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽味抖。三九已至评甜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間仔涩,已是汗流浹背忍坷。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留熔脂,地道東北人承匣。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像锤悄,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子嘉抒,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,762評論 2 345

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

  • 轉(zhuǎn)載:http://www.cocoachina.com/ios/20170615/19529.html 參考:h...
    F麥子閱讀 3,989評論 3 2
  • 本人有若干成套學(xué)習(xí)視頻, 可試看! 可試看! 可試看, 重要的事情說三遍 包含Java, 數(shù)據(jù)結(jié)構(gòu)與算法, iOS...
    小冰山口閱讀 1,051評論 5 4
  • iPhone的標(biāo)準(zhǔn)推薦是CFNetwork 庫編程零聚,其封裝好的開源庫是 cocoa AsyncSocket庫,用它...
    Ethan_Struggle閱讀 2,223評論 2 12
  • 國家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 10,869評論 6 13
  • 杞人者些侍,吾友王兄恩御隶症,定遠人氏「谛淮北師范大學(xué)教授蚂会,今卜居淮安。君心系古學(xué)耗式,能詩善飲胁住,雖與我相距遙遠趁猴,卻時有...
    湖畔漁夫閱讀 261評論 1 3