欢迎转载!转载时请注明。
iOS中Socket的实现方式有很多种,你可以选择使用CFNetwork库API自己敲,当然,如果你想绕过那些繁琐的逻辑控制和异常处理,那么最好的解决方案就是寻找一个稳定、安全、可靠的开源库。
曾经有一个朋友问过我这样一个问题:
你能自己写为什么还要去用别人的?
我的回答是:
全世界几乎所有iOS开发者都能写HTTP请求为什么还在用AF...和ASI...?
其实这个问题很简单,就是愿意装x还是愿意选择效率的区别。就啰嗦到这里,下面进入正题。
开源库:AsyncSocket, 可以在Git中直接搜索下载。
还是先说一下基础:
初始化和连接:
@property(nonatomic,strong)AsyncSocket * mainSocket;
- (AsyncSocket *)mainSocket { if (!_mainSocket) { _mainSocket = [[AsyncSocket alloc] init]; } return _mainSocket; }
[self.mainSocket setDelegate:self];
连接到服务器:BOOL successToConnect = [self.mainSocket connectToHost:host onPort:port error:&error];
当我们请求数据发送后,服务器响应的数据会在代理方法 - (void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag 中,那么问题来了:
前提:Socket读取的数据(当前通道中可读取的数据)并不一定是发送方所发送的完整数据包,比如发送方发送了一个结构为0xabc的数据,那么读取方在读取的时候受多种因素的限制&#