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

首頁 > 系統 > iOS > 正文

iOS使用GCDSocketManager實現長連接的方法

2019-10-21 18:42:55
字體:
來源:轉載
供稿:網友

.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>//握手次數@property(nonatomic,assign) NSInteger pushCount;//斷開重連定時器@property(nonatomic,strong) NSTimer *timer;//重連次數@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 連接成功//連接成功的回調- (void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(uint16_t)port {  DLog(@"socket連接成功");  [self sendDataToServer];}//連接成功后向服務器發送數據- (void)sendDataToServer {  //發送數據代碼省略...    //發送  [self.socket writeData:jsonData withTimeout:-1 tag:1];    //讀取數據  [self.socket readDataWithTimeout:-1 tag:200];}//連接成功向服務器發送數據后,服務器會有響應- (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag {    [self.socket readDataWithTimeout:-1 tag:200];    //服務器推送次數  self.pushCount++;    //在這里進行校驗操作,情況分為成功和失敗兩種,成功的操作一般都是拉取數據}#pragma mark 連接失敗//連接失敗的回調- (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"]) {        //重連次數    self.reconnectCount++;        //如果連接失敗 累加1秒重新連接 減少服務器壓力    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實現長連接的方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到IOS開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 驻马店市| 临猗县| 石门县| 普安县| 兴隆县| 桃源县| 策勒县| 湟源县| 修水县| 调兵山市| 苍山县| 兴安盟| 屏边| 边坝县| 宁明县| 武安市| 焦作市| 赤水市| 浦城县| 宁陵县| 凤庆县| 浑源县| 玉屏| 苏尼特右旗| 鄯善县| 库车县| 盐边县| 江口县| 江西省| 金山区| 云和县| 略阳县| 眉山市| 台东市| 大英县| 普格县| 阳曲县| 体育| 澜沧| 沅陵县| 固镇县|