CocoaAsyncSocket學(xué)習(xí)


CocoaAsyncSocket

? ? ? CocoaAsyncSocket支持tcp和udp。其中:AsyncSocket類是支持TCP的,AsyncUdpSocket是支持UDP的。AsyncSocket是封裝了CFSocket和CFSteam的TCP/IP socket網(wǎng)絡(luò)庫(kù)。它提供了異步操作,本地cocoa類的基于delegate的完整支持。AsyncUdpSocket是UDP/IP socket網(wǎng)絡(luò)庫(kù),包裝自CFSocket。它的工作很像TCP版本,只不過(guò)是用于處理UDP的。

創(chuàng)建tcp服務(wù)器

//1、創(chuàng)建一個(gè) GCDAsyncSocket 對(duì)象

self.socket =[[GCDAsyncSocket alloc]initWithDelegate:selfdelegateQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0)];

//2、打開(kāi)監(jiān)聽(tīng)端口

NSError*error=nil;

[self.socket acceptOnPort:端口名 error:&error];

// 3. 判斷端口號(hào)是否開(kāi)放成功if (error == nil) {

NSLog(@"服務(wù)器開(kāi)啟成功");

}else{

NSLog(@"服務(wù)器開(kāi)啟失敗");

}

當(dāng)客戶端鏈接服務(wù)器端的socket, 為客戶端單生成一個(gè)newSocket,將客戶端的連接保存起來(lái)

#pragma mark - GCDAsyncSocketDelegate

// 當(dāng)客戶端鏈接服務(wù)器端的socket, 為客戶端單生成一個(gè)newSocket

-?(void)socket:(GCDAsyncSocket*)sockdidAcceptNewSocket:(GCDAsyncSocket*)newSocket

{

//鏈接成功

//IP:?newSocket.connectedHost

//端口號(hào):?newSocket.connectedPort

//?short:?%hd

//?unsigned?short:?%hu

//?存儲(chǔ)新的端口號(hào)

self.clientSocket=?newSocket;

[self.clientSocket readDataWithTimeout:-1 tag:0];

}

讀取信息

[newSocket readDataWithTimeout:-1 tag:0];//執(zhí)行一次讀取一次,可在接收消息后調(diào)用,這樣可以連續(xù)接收消息

接收信息

- (void)socket:(GCDAsyncSocket*)sockdidReadData:(NSData*)data withTag:(long)tag

{

[self.clientSocket readDataWithTimeout:-1 tag:0];

NSString*message?=?[[NSStringalloc]initWithData:dataencoding:NSUTF8StringEncoding];

}

給客戶端發(fā)送消息

NSData*data = [

[string dataUsingEncoding:NSUTF8StringEncoding];

[self.clientSocket writeData:datawithTimeout:-1tag:0];



客戶端TCP鏈接

鏈接服務(wù)器

NSString *host = @"192.168.1.60";//服務(wù)器IP

UInt32 port = 54321;//端口

// 1. 創(chuàng)建socket

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

//?2.?與服務(wù)器的socket鏈接起來(lái)

NSError*error?=nil;

BOOLresult = [self.socket connectToHost:host onPort:port error:&error];

//?3.?判斷鏈接是否成功

if(result)?{

[NSLog:@"客戶端鏈接服務(wù)器成功"];

}else{

[NSLog:@"客戶端鏈接服務(wù)器失敗"];

}

接收數(shù)據(jù)

[self.socket readDataWithTimeout:-1 tag:0];//啟動(dòng)一次只能接收到一次消息

發(fā)送消息

[self.socket writeData:[string dataUsingEncoding:NSUTF8StringEncoding]withTimeout:-1 tag:0];

接收鏈接服務(wù)器和消息的代理方法

#pragma mark - GCDAsyncSocketDelegate

//?客戶端鏈接服務(wù)器端成功,?客戶端獲取地址和端口號(hào)

-?(void)socket:(GCDAsyncSocket*)sock didConnectToHost:(NSString*)host port:(uint16_t)port

{

? ? [self.socket readDataWithTimeout:-1 tag:0];

}

//?客戶端已經(jīng)獲取到內(nèi)容

-?(void)socket:(GCDAsyncSocket*)sockdidReadData:(NSData*)datawithTag:(long)tag

{

[self.socket readDataWithTimeout:-1 tag:0];

NSString*content?=?[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)載:http://www.cocoachina.com/ios/20170615/19529.html 參考:h...
    F麥子閱讀 4,136評(píng)論 3 2
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評(píng)論 19 139
  • 本人有若干成套學(xué)習(xí)視頻, 可試看! 可試看! 可試看, 重要的事情說(shuō)三遍 包含Java, 數(shù)據(jù)結(jié)構(gòu)與算法, iOS...
    小冰山口閱讀 1,190評(píng)論 5 4
  • iPhone的標(biāo)準(zhǔn)推薦是CFNetwork 庫(kù)編程,其封裝好的開(kāi)源庫(kù)是 cocoa AsyncSocket庫(kù),用它...
    Ethan_Struggle閱讀 2,357評(píng)論 2 12
  • socket 連接 即時(shí)通訊最大的特點(diǎn)就是實(shí)時(shí)性,基本感覺(jué)不到延時(shí)或是掉線,所以必須對(duì)socket的連接進(jìn)行監(jiān)視與...
    Theshy閱讀 3,287評(píng)論 5 8

友情鏈接更多精彩內(nèi)容