詳解iPhone 下AsyncSocket網(wǎng)絡(luò)庫編程
詳解iPhone 下AsyncSocket網(wǎng)絡(luò)庫編程是本文要介紹的內(nèi)容,iphone的標(biāo)準(zhǔn)推薦CFNetwork C庫編程.但是編程比較煩躁。在其它OS往往用類來封裝的對Socket函數(shù)的處理。比如MFC的CAsysncSocket.在iphone也有類似于開源項目.cocoa AsyncSocket庫
官方網(wǎng)站:http://code.google.com/p/cocoaasyncsocket/
它用來簡化CFnetwork的調(diào)用.
一、在項目引入ASyncSocket庫
1、下載ASyncSocket庫源碼
2、把ASyncSocket庫源碼加入項目
3、在項目增加CFNetwork框架
注意這里XCode 有一個BUG。CFNetwork框架沒有在Frame列表當(dāng)中。
在XCode 3.1.4中,在Framework目錄右健,選擇Add-->Existing Files...
選擇如下目錄
- /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOSX.Y.sdk/System/Library/Frameworks/CFNetwork.framework
注意這里iPhoneOSX.Y.sdk是相應(yīng)的版本,在XCode 3.1.4中可以選擇iPhoneOS 3.1.3sdk這個最高版本
二、TCP客戶端
1、在controller頭文件加入AsyncSocket指針
- #import <UIKit/UIKit.h>
- #import "AsyncSocket.h"
- @interface HelloiPhoneViewController : UIViewController {
- UITextField * textField;
- AsyncSocket * asyncSocket;
- }
- @property (retain, nonatomic) IBOutlet UITextField *textField;
- - (IBAction) buttonPressed: (id)sender;
- - (IBAction) textFieldDoneEditing: (id)sender;
- @end
2、在需要聯(lián)接地方使用connectToHost聯(lián)接服務(wù)器
其中initWithDelegate的參數(shù)中self是必須。這個對象指針中的各個Socket響應(yīng)的函數(shù)將被ASyncSocket所調(diào)用.
- asyncSocket = [[AsyncSocket alloc] initWithDelegate:self];
- NSError *err = nil;
- if(![asyncSocket connectToHost:host on:port error:&err])
- {
- NSLog(@"Error: %@", err);
- }
3.增加Socket響應(yīng)事件
因為initWithDelegate把將當(dāng)前對象傳遞進(jìn)去,這樣只要在當(dāng)前對象方法實現(xiàn)相應(yīng)方法.
4.關(guān)于NSData對象
無論SOCKET收發(fā)都采用NSData對象.它的定義是
http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSData_Class/Reference/Reference.html
NSData主要是帶一個(id)data指向的數(shù)據(jù)空間和長度 length.
NSString 轉(zhuǎn)換成NSData 對象
NSData 轉(zhuǎn)換成NSString對象
- NSData * data;
- NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
4、發(fā)送數(shù)據(jù)
AsyncSocket writeData 方法來發(fā)送數(shù)據(jù),它有如下定義
- (void)writeData:(NSData *)data withTimeout:(NSTimeInterval)timeout tag:(long)tag;
以下是一個實例語句.
- NSData* aData= [@"test data" dataUsingEncoding: NSUTF8StringEncoding];
- [sock writeData:aData withTimeout:-1 tag:1];
5、接收Socket數(shù)據(jù).
在onSocket重載函數(shù),有如定義采用是專門用來處理SOCKET的接收數(shù)據(jù)的.
- -(void) onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag
在中間將其轉(zhuǎn)換成NSString進(jìn)行顯示.
- NSString* aStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
- NSLog(@"===%@",aStr);
- [aStr release];
小結(jié):詳解iPhone 下AsyncSocket網(wǎng)絡(luò)庫編程的內(nèi)容介紹完了,希望本文對你有所幫助!