iOS进阶不易的地方

Socket通信之GCDAsyncSocket用法

2016-07-04  本文已影响431人  可能是含钙最高的钙钙

这篇文章只是简单记录下GCDAsyncSocket用户端的简单用法,后续我会把os层基于C的 BSD socket,Core Foundation层的CFNetWork以及cocoa层的NSStream简单用法整理出来,以备今后查询.各位大神如果有深入的研究的或者有什么好的使用技巧了都可以交流下哦,欢迎指出使用不当之处.

Socket

Snip20160707_1.png

GCDAsyncSocket用法

-创建Socket对象.GCDAsyncSocket中socket链接后的事件处理都是在代理里面的

    // 创建Socket对象
    // 设置代理,让代理在全局队列中调用
    GCDAsyncSocket *clientSocket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_global_queue(0, 0)];
    // 用强指针引用着Socket对象
    self.clientSocket = clientSocket;
    
    NSString *host = nil;
    uint16_t port = 8288;
    // 连接服务器
    NSError *error = nil;
    
    [clientSocket connectToHost:host onPort:port error:&error];
    if (error) {
        NSLog(@"%@", error.localizedDescription);
    }
// 连接成功后的回调
- (void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(uint16_t)port{
    
    // 监听读取数据
    [sock readDataWithTimeout:-1 tag:0];
    
}

// 与服务器断开连接后的回调
- (void)socketDidDisconnect:(GCDAsyncSocket *)sock withError:(NSError *)err{
    // 可以调用该方法查看断开连接的原因
    NSLog(@"%@", err);
}

// 接收数据的回调
- (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag{
    // 接收到的消息
    NSString *messageStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    NSLog(@"%@", messageStr);
    
    //  准备读取下次的数据
    [sock readDataWithTimeout:-1 tag:0];
    
}
/**
 *  发送消息
 *
 *  @param sendMessage 发送的消息内容
 */
- (void)sendMessage:(NSString *)sendMessage{
    
    if (sendMessage == nil || sendMessage.length == 0) {
        return;
    }
    
    // 发送
    [self.clientSocket writeData:[sendMessage dataUsingEncoding:NSUTF8StringEncoding] withTimeout:-1 tag:0];
    
}

// 发送消息成功后的回调,消息发送成功后可以在这个代理里面做一些处理
- (void)socket:(GCDAsyncSocket *)sock didWriteDataWithTag:(long)tag{
    
    
}
上一篇下一篇

猜你喜欢

热点阅读