国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > iOS > 正文

iOS使用GCDSocketManager實現(xiàn)長連接的方法

2020-07-26 02:34:42
字體:
供稿:網(wǎng)友

.h文件

#import <Foundation/Foundation.h>#import "GCDAsyncSocket.h"@interface GCDSocketManager : NSObject@property(nonatomic,strong) GCDAsyncSocket *socket;//單例+ (instancetype)sharedSocketManager;//連接- (void)connectToServer;//斷開- (void)cutOffSocket;@end

.m文件

#import "GCDSocketManager.h"#define SocketHost @"地址"#define SocketPort 端口@interface GCDSocketManager()<GCDAsyncSocketDelegate>//握手次數(shù)@property(nonatomic,assign) NSInteger pushCount;//斷開重連定時器@property(nonatomic,strong) NSTimer *timer;//重連次數(shù)@property(nonatomic,assign) NSInteger reconnectCount;@end@implementation GCDSocketManager//全局訪問點+ (instancetype)sharedSocketManager {  static GCDSocketManager *_instance = nil;  static dispatch_once_t onceToken;  dispatch_once(&onceToken, ^{    _instance = [[self alloc] init];  });  return _instance;}//可以在這里做一些初始化操作- (instancetype)init{  self = [super init];  if (self) {      }  return self;}#pragma mark 請求連接//連接- (void)connectToServer {  self.pushCount = 0;    self.socket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];    NSError *error = nil;  [self.socket connectToHost:SocketHost onPort:SocketPort error:&error];    if (error) {    DLog(@"SocketConnectError:%@",error);  }}#pragma mark 連接成功//連接成功的回調(diào)- (void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(uint16_t)port {  DLog(@"socket連接成功");  [self sendDataToServer];}//連接成功后向服務(wù)器發(fā)送數(shù)據(jù)- (void)sendDataToServer {  //發(fā)送數(shù)據(jù)代碼省略...    //發(fā)送  [self.socket writeData:jsonData withTimeout:-1 tag:1];    //讀取數(shù)據(jù)  [self.socket readDataWithTimeout:-1 tag:200];}//連接成功向服務(wù)器發(fā)送數(shù)據(jù)后,服務(wù)器會有響應(yīng)- (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag {    [self.socket readDataWithTimeout:-1 tag:200];    //服務(wù)器推送次數(shù)  self.pushCount++;    //在這里進行校驗操作,情況分為成功和失敗兩種,成功的操作一般都是拉取數(shù)據(jù)}#pragma mark 連接失敗//連接失敗的回調(diào)- (void)socketDidDisconnect:(GCDAsyncSocket *)sock withError:(NSError *)err {  DLog(@"Socket連接失敗");    self.pushCount = 0;    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];    NSString *currentStatu = [userDefaults valueForKey:@"Statu"];    //程序在前臺才進行重連  if ([currentStatu isEqualToString:@"foreground"]) {        //重連次數(shù)    self.reconnectCount++;        //如果連接失敗 累加1秒重新連接 減少服務(wù)器壓力    NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 * self.reconnectCount target:self selector:@selector(reconnectServer) userInfo:nil repeats:NO];        self.timer = timer;  }}//如果連接失敗,5秒后重新連接- (void)reconnectServer {    self.pushCount = 0;    self.reconnectCount = 0;    //連接失敗重新連接  NSError *error = nil;  [self.socket connectToHost:SocketHost onPort:SocketPort error:&error];  if (error) {    DLog(@"SocektConnectError:%@",error);  }}#pragma mark 斷開連接//切斷連接- (void)cutOffSocket {  DLog(@"socket斷開連接");    self.pushCount = 0;    self.reconnectCount = 0;    [self.timer invalidate];  self.timer = nil;    [self.socket disconnect];}@end

以上這篇iOS使用GCDSocketManager實現(xiàn)長連接的方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 临潭县| 北辰区| 宕昌县| 彩票| 灯塔市| 南平市| 连平县| 宝兴县| 嘉祥县| 南华县| 辽宁省| 平昌县| 简阳市| 岳阳市| 习水县| 金川县| 永春县| 鞍山市| 中西区| 武鸣县| 龙南县| 孝义市| 新兴县| 汉中市| 南丰县| 宝应县| 丽江市| 固阳县| 阜南县| 衡阳市| 毕节市| 邓州市| 大冶市| 张掖市| 华坪县| 勃利县| 寻乌县| 舞钢市| 中西区| 商洛市| 孝昌县|