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的乙個請求報文...