iOS的Asyncsocket進行socket程式設計

2021-06-27 18:14:50 字數 2197 閱讀 2778

iphone的標準推薦cfnetwork c庫程式設計.但是程式設計比較煩躁。在其它os往往用類來封裝的對socket函式的處理。比如mfc的casysncsocket.在iphone也有類似於開源專案.cocoa asyncsocket庫, 官方**: 它用來簡化cfnetwork的呼叫.

一.在專案引入asyncsocket庫

2.把asyncsocket庫原始碼加入專案:只需要增加runloop目錄中的asyncsocket.h、asyncsocket.m、asyncudpsocket.h和asyncudpsocket.m四個檔案。

3.在專案增加cfnetwork框架

在framework目錄右健,選擇add-->existing files...    , 選擇 cfnetwork.framework

二.tcp客戶端

1. 在controller標頭檔案定義asyncsocket物件

#import

#import "asyncsocket.h"

@inte***ce helloiphoneviewcontroller : uiviewcontroller

@property (retain, nonatomic) iboutlet uitextfield *textfield;

- (ibaction) buttonpressed: (id)sender;

- (ibaction) textfielddoneediting: (id)sender;    

@end

2.在需要聯接地方使用connecttohost聯接伺服器

其中initwithdelegate的引數中self是必須。這個物件指標中的各個socket響應的函式將被asyncsocket所呼叫.

asyncsocket = [[asyncsocket alloc] initwithdelegate:self]; 

nserror *err = nil; 

if(![asyncsocket connecttohost:host on:port error:&err])   

3.增加socket響應事件

因為initwithdelegate把將當前物件傳遞進去,這樣只要在當前物件方法實現相應方法.

4.關於nsdata物件

nsdata主要是帶乙個(id)data指向的資料空間和長度 length.

nsstring 轉換成nsdata 物件

nsdata* xmldata = [@"testdata" datausingencoding:nsutf8stringencoding];

nsdata 轉換成nsstring物件

nsdata * data;

nsstring *result = [[nsstring alloc] initwithdata:data  encoding:nsutf8stringencoding];

4.傳送資料

asyncsocket  writedata    方法來傳送資料,它有如下定義

- (void)writedata:(nsdata *)data withtimeout:(nstimeinterval)timeout tag:(long)tag;

以下是乙個例項語句.

nsdata* adata= [@"test data" datausingencoding: nsutf8stringencoding];

[sock writedata:adata withtimeout:-1 tag:1];

在onsocket過載函式,有如定義採用是專門用來處理socket的傳送資料的:

-(void)onsocket(asyncsocket *)sock didwritedatawithtag:(long)tag  

5.接收socket資料.

在onsocket過載函式,有如定義採用是專門用來處理socket的接收資料的.

-(void) onsocket:(asyncsocket *)sock didreaddata:(nsdata *)data withtag:(long)tag

在中間將其轉換成nsstring進行顯示.

nsstring* astr = [[nsstring alloc] initwithdata:data encoding:nsutf8stringencoding]; 

nslog(@"===%@",astr); 

[astr release];

iphone 下AsyncSocket網路庫程式設計

phone的標準推薦cfnetworkc庫程式設計.但是程式設計比較煩躁。在其它os往往用類來封裝的對socket函式的處理。比如mfc的casysncsocket.在iphone也有類似於開源專案.cocoaasyncsocket庫 官方 它用來簡化cfnetwork的呼叫.一.在專案引入asyn...

MFC中用Asyncsocket類實現udp組播

void cudpgroupdlg onbnclickedbutton1 else void cudpgroupdlg onbnclickedbutton2 結果 簡單的實現了udp的組播,可以傳送,接收訊息。過程 由asyncsocket派生乙個類出來,過載onsend和onreceive 視窗類...

AsyncSocket長連線棒包裝問題解決

project正在使用長連線快來server溝通。因此,指定我們的協議前兩個位元組為資料長度來區分資料報 1.server傳輸資料過快,出現粘包的問題,比如 1.1服務端一次發來多個推送訊息 1.2網路不穩定,client連續傳送多個請求client一次接收到所有答覆。2.client的乙個請求報文...