IOS 开源库 asyncSocket 的使用心得

来源:互联网 发布:国家燃烧知乎 编辑:程序博客网 时间:2024/05/01 17:17

转自http://blog.csdn.net/zltianhen/article/details/6560322

1.得到asyncSocket的代码

2.导入CFNetwork.framework

 

 

3.在.m中在代码中添加

 

[cpp] view plaincopy
  1. - (IBAction)pressTest:(id)sender  
  2. {  
  3.     if (!_asyncSocket)  
  4.     {  
  5.         _asyncSocket = [[AsyncSocket alloc]initWithDelegate:self];  
  6.         NSString *host = @"192.168.18.78";  
  7.         int nPort = 9000;  
  8.         NSError *error = nil;  
  9.         //[_asyncSocket connectToHost:host onPort:nPort error:&error];  
  10.         [_asyncSocket connectToHost:host onPort:nPort withTimeout:2 error:&error];  
  11.           
  12.         NSLog(@"%@",error);  
  13.           
  14.     }  
  15. }  

 

在[_asyncSocket connectToHost:host onPort:nPort error:&error]; 和 [_asyncSocket connectToHost:host onPort:nPort withTimeout:2 error:&error];

建议选择后者,因为连接服务器有一个超时可以设置,可以更加灵活操作。超时后会调用

[cpp] view plaincopy
  1. - (void)onSocket:(AsyncSocket *)sock willDisconnectWithError:(NSError *)err  
  2. {  
  3.       NSLog(@"Info___willDisconnectWithError");  
  4.     //[self logInfo:FORMAT(@"Client Disconnected: %@:%hu", [sock connectedHost], [sock connectedPort])];  
  5.       
  6.       
  7.     [_asyncSocket release];  
  8.     _asyncSocket = nil;  
  9. }  

 

 

收发数据中必须注意是添加 [sock readDataWithTimeout:-1 tag:0];否则接收不到数据,并且这个函数在数据返回就必须调用一次,让他一直循环下去。

比如在网络连接成功后

 

[cpp] view plaincopy
  1.  - (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port  
  2. {  
  3.     NSLog(@"Info___didConnectToHost");  
  4.     [sock readDataWithTimeout:-1 tag:0];  
  5. }  
 

 

或者是收到数据后

[cpp] view plaincopy
  1. - (void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag  
  2. {  
  3.     NSLog(@"Info___didReadData");  
  4.     NSData *strData = [data subdataWithRange:NSMakeRange(0, [data length])];  
  5.     NSString *msg = [[[NSString alloc] initWithData:strData encoding:NSUTF8StringEncoding] autorelease];  
  6.     if(msg)  
  7.     {  
  8.         NSLog(@"%@",msg);  
  9.     }  
  10.     else  
  11.     {  
  12.         [self logError:@"Error converting received data into UTF-8 String"];  
  13.     }  
  14.     [sock readDataWithTimeout:-1 tag:0];  
  15.   
  16. }  
 

0 0