首页 > 代码库 > AsyncSocket 使用

AsyncSocket 使用

  今天使用AsyncSocket模拟及时通信,在这里记录一下,免得以后自己又犯相同的错误

  1>创建客户端和服务器socket

 1 /** 2  *  设置socket 3  */ 4 - (void)setupSocket 5 { 6     //1.客户端socket 7     _clientSocket = [[AsyncSocket alloc] initWithDelegate:self]; 8     //2. 启用定时器连接服务器 9     10     [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(tryToConnect:) userInfo:nil repeats:YES];11     12     //3.实例化服务器13     _serverSocket = [[AsyncSocket alloc] initWithDelegate:self];14     15     [_serverSocket acceptOnPort:8888 error:nil];16 }

  定时器代码:

 1 - (void)tryToConnect:(NSTimer *)timer 2 { 3     if ([_clientSocket isConnected]) { 4         [timer invalidate]; 5         return; 6     } 7     NSString *host = @"10.0.185.132"; 8     UInt16 port = 8080; 9     [_clientSocket connectToHost:host onPort:port withTimeout:-1 error:nil];10 }

  2>实现协议回调方法

 1 #pragma mark - socket协议 2  3 - (void)onSocket:(AsyncSocket *)sock didAcceptNewSocket:(AsyncSocket *)newSocket 4 { 5     NSLog(@"接收到新的socket连接"); 6     [_connectArray addObject:newSocket]; 7     [newSocket readDataWithTimeout:-1 tag:300]; 8 } 9 /*10  * 客户端连接服务器失败时的回调11  */12 - (void)onSocket:(AsyncSocket *)sock willDisconnectWithError:(NSError *)err13 {14     NSLog(@"客户端连接失败,错误信息:%@", [err localizedDescription]);15 }16 17 /*18  * 客户端连接服务器成功时的回调19  */20 - (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port21 {22     NSLog(@"客户端连接成功:host:%@ port :%d", host, port);23 }24 25 //接收客户端发送过来的数据26 27 - (void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag28 {29     NSString *message =[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];30 31     [self sendMessage:message messageType:MessageTypeOther];32     33     //特别注意这句话一定要写,不然只会读取第一条数据,写这句话表示不停的等待读取数据34     [sock readDataWithTimeout:-1 tag:300];35 }

  3>发送信息

 1 NSData *data =http://www.mamicode.com/ [text dataUsingEncoding:NSUTF8StringEncoding]; 2      3     //发送消息 4     if ([_clientSocket isConnected]) { 5         [_clientSocket writeData:data withTimeout:60 tag:100]; 6          7     }else{ 8         NSLog(@"连接断开"); 9         //尝试重新连接10         [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(tryToConnect:) userInfo:nil repeats:YES];11     }

 

AsyncSocket 使用