GCDAsyncSocket~
第三方的一个socket通信框架,原生的一般用的人比较少,优秀第三方可以提升开发效率,减少开发中出现错误的几率
下面的代码是实例化一个socket对象,并为其指定代理,指定代理方法运行的队列
_socket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)];
下面的代码是指定一个主机名,一个端口号,进行链接
[_socket connectToHost:hostName onPort:port error:&error];
连接成功之后就可以进行socket通信了
为当前的控制器指定GCDAsyncSocket代理协议,并实现
- (void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(uint16_t)port
- (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag
- (void)socket:(GCDAsyncSocket *)sock didWriteDataWithTag:(long)tag
见其名知其意,其实代理方法有很多,只不过这三个比较常用而已
一般在didWriteDataWithTag会调用一次[_socket readDataWithTimeout:-1 tag:tag];方法去读取数据(注意,didWrite是完成时,已经将数据写给了服务器)
而且根据tag值我们还可以判断出是哪一个或者哪一类发送的数据对应的返回数据
还有一个需要注意的地方就是,如果接收到数据后要刷新View,你需要看一下你接收到数据那个方法所在的是不是主线程,如果不是主线程需要进行切换,只有在主线程里才能更新UI