ios實現基於socket tcp/ip 的通信


以前寫過基於http的網絡傳輸層的通信,如今項目須要實現tcp/ip的通信協議,經過網絡查找了一下,已經有人寫好了公開的類庫AsyncSocket,下面介紹一下AsyncSocket的使用方法。 ios

AsyncSocket的官方文檔:http://code.google.com/p/cocoaasyncsocket/ 服務器

使用方法以下: 網絡

一、建立工程。 iphone

二、把AsyncSocket添加到項目中。 socket

三、添加CFNetwork.framework到工程中。 async

四、實現測試類: tcp

#import <UIKit/UIKit.h> 
#import "AsyncSocket.h" 
@interface iphone_socketViewController : UIViewController {  svn

    AsyncSocket *asyncSocket; 
測試

@end google

相應的方法實現:

 

#import "iphone_socketViewController.h" 
@implementation iphone_socketViewController 
- (void)viewDidLoad { 
    [super viewDidLoad]; 
    asyncSocket = [[AsyncSocket alloc] initWithDelegate:self]; 
    NSError *err = nil; 
   if(![asyncSocket connectToHost:@"192.168.0.113" onPort:25001 error:&err]) 
    { 
        NSLog(@"Error: %@", err); 
    } 

- (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port 

    NSLog(@"onSocket:%p didConnectToHost:%@ port:%hu", sock, host, port); 
    [sock readDataWithTimeout:1 tag:0]; 

-(void) onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag 

    NSString* aStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 
    NSLog(@"===%@",aStr); 
    [aStr release]; 
    NSData* aData= [@"<xml>我喜歡你<xml>" dataUsingEncoding: NSUTF8StringEncoding]; 
    [sock writeData:aData withTimeout:-1 tag:1]; 
    [sock readDataWithTimeout:1 tag:0]; 

- (void)onSocket:(AsyncSocket *)sock didSecure:(BOOL)flag 

        NSLog(@"onSocket:%p didSecure:YES", sock); 

- (void)onSocket:(AsyncSocket *)sock willDisconnectWithError:(NSError *)err 

    NSLog(@"onSocket:%p willDisconnectWithError:%@", sock, err); 

- (void)onSocketDidDisconnect:(AsyncSocket *)sock 

    //斷開鏈接了 
    NSLog(@"onSocketDidDisconnect:%p", sock); 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 

- (void)viewDidUnload { 
    asyncSocket=nil; 

- (void)dealloc { 
    [asyncSocket release]; 
    [super dealloc]; 

@end

這裏只實現了簡單的客戶端,關於服務器的實現,是採用pathy寫的。在源代碼中有。

編譯運行結果:

服務器端:

bogon:iosworkspace vsp$ ./Servers.py 
客戶端的IP是: (’192.168.0.169′, 54851) 
<xml>我喜歡你<xml> 
————– 
後來發的數據——-

客戶端:

2010-12-27 19:14:47.723 iphone.socket[3186:307] WB:Notice: WinterBoard 
2010-12-27 19:14:48.892 iphone.socket[3186:307] onSocket:0x16bd00 didConnectToHost:192.168.0.113 port:25001 
2010-12-27 19:14:48.897 iphone.socket[3186:307] ===我是服務器端的數據 
2010-12-27 19:14:48.911 iphone.socket[3186:307] ===我不喜歡你 
2010-12-27 19:14:48.918 iphone.socket[3186:307] onSocket:0x16bd00 willDisconnectWithError:(null) 
2010-12-27 19:14:48.928 iphone.socket[3186:307] onSocketDidDisconnect:0x16bd00

源代碼:http://easymorse-iphone.googlecode.com/svn/trunk/iphone.socket/

相關文章
相關標籤/搜索