詳解iPhone 下AsyncSocket網絡庫編程
詳解iPhone 下AsyncSocket網絡庫編程是本文要介紹的內容,iphone的標準推薦CFNetwork C庫編程.但是編程比較煩躁。在其它OS往往用類來封裝的對Socket函數的處理。比如MFC的CAsysncSocket.在iphone也有類似于開源項目.cocoa AsyncSocket庫
官方網站:http://code.google.com/p/cocoaasyncsocket/
它用來簡化CFnetwork的調用.
一、在項目引入ASyncSocket庫
1、下載ASyncSocket庫源碼
2、把ASyncSocket庫源碼加入項目
3、在項目增加CFNetwork框架
注意這里XCode 有一個BUG。CFNetwork框架沒有在Frame列表當中。
在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是相應的版本,在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、在需要聯接地方使用connectToHost聯接服務器
其中initWithDelegate的參數中self是必須。這個對象指針中的各個Socket響應的函數將被ASyncSocket所調用.
- asyncSocket = [[AsyncSocket alloc] initWithDelegate:self];
- NSError *err = nil;
- if(![asyncSocket connectToHost:host on:port error:&err])
- {
- NSLog(@"Error: %@", err);
- }
3.增加Socket響應事件
因為initWithDelegate把將當前對象傳遞進去,這樣只要在當前對象方法實現相應方法.
4.關于NSData對象
無論SOCKET收發都采用NSData對象.它的定義是
http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSData_Class/Reference/Reference.html
NSData主要是帶一個(id)data指向的數據空間和長度 length.
NSString 轉換成NSData 對象
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];
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網絡庫編程的內容介紹完了,希望本文對你有所幫助!