使用WebSocket进行长连接通信
主要使用的是CocoaAsyncSocket
集成就不说了,打开workspace
1.在build phases中加入编译源
2.引入头文件
#import<GCDAsyncSocket.h>
@property(nonatomic,retain)GCDAsyncSocket *socket;//定义一个Socket对象
3.遵守协议<GCDAsyncSocketDelegate>
4.初始化
self.socket =[[GCDAsyncSocketalloc]initWithDelegate:selfdelegateQueue:dispatch_get_global_queue(0,0)];
5.连接服务器
[self.socket connectToHost:host onPort:port error:&error]//返回值是BOOL类型的
6.发送数据
[self.socketwrite Data:msg DatawithTimeout:30 tag:123];//msg为Data类型
7.各协议使用
//成功链接到服务器后会回调的方法
- (void)socket:(GCDAsyncSocket*)sock didConnectToHost:(NSString*)host port:(uint16_t)port{
//NSLog("Connect to the server successfully!");
//Or do something
}
//接收数据完成后会回调的方法
- (void)socket:(GCDAsyncSocket*)sock didReadData:(NSData*)data withTag:(long)tag;
//接收过程中会回调的方法 主要用于查看接收进度
- (void)socket:(GCDAsyncSocket*)sock didReadPartialDataOfLength:(NSUInteger)partialLength tag:(long)tag;
//发送数据完成后会回调的方法
- (void)socket:(GCDAsyncSocket*)sock didWriteDataWithTag:(long)tag;
//发送过程中会回调的方法 主要用于查看发送进度
//当某一读/写(下一个方法)任务达到超时时间,但还没有完成时,用于给当前任务增加超时时间的方法(如果不实现该方法,任务会正常超时结束)
- (NSTimeInterval)socket:(GCDAsyncSocket*)sock shouldTimeoutReadWithTag:(long)tag elapsed:(NSTimeInterval)elapsed bytesDone:(NSUInteger)length;
- (NSTimeInterval)socket:(GCDAsyncSocket*)sock shouldTimeoutWriteWithTag:(long)tag elapsed:(NSTimeInterval)elapsed bytesDone:(NSUInteger)length;
先写到这吧,以后慢慢加