GCDAsyncSocket.

1.这是TCP的使用的Socket包,无论怎么样都要先connect.

-(void)socketConnectHost{​

    if (_socket == nil) {

        dispatch_queue_t mainQueue = dispatch_get_main_queue();

        _socket = [[GCDAsyncSocketallocinitWithDelegate:selfdelegateQueue:mainQueue];

        NSError *err = nil;

        [selfconnectToHost:kConf_Server_AddrandPort:kConf_Server_PORT];

        if(![_socketconnectToHost:kConf_Server_Addr  onPort:kConf_Server_PORTerror:&err])

        {

            NSLog(@"Error: %@", err);

        }

    }else{

        [selfconnectToHost:kConf_Server_AddrandPort:kConf_Server_PORT];

    }

 }

只有- (void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(uint16_t)port{}成功之后,才能收发socket.

收socket:- (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag{}

发socket: [_socketwriteData:data withTimeout:-1tag:1];

断开连接会调用:- (void)socketDidDisconnect:(GCDAsyncSocket *)sock withError:(NSError *)err{}

当然一般情况下我们在socket断开时要重连.重连时间,一般是服务器和客户端商量好的.在断开之后,在:- (void)socketDidDisconnect:(GCDAsyncSocket *)sock withError:(NSError *)err{}使用NSTimer设置重连,重连成功,停止timer.

2.当我们要在后台接收socket时,可以在targets->capabilities->background modes->Voice Over Ip 打开VOIP.

(1),可以

- (void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(uint16_t)port

{

    //后台挂起voip

    [asyncSocket performBlock:^{

        [asyncSocket enableBackgroundingOnSocket];

    }];

}

(2),也可以在appdelegate.m里面设置

- (void)applicationDidEnterBackground:(UIApplication *)application{

    UIApplication *app = [UIApplication sharedApplication];

    __block UIBackgroundTaskIdentifier bgTask;

    bgTask = [app beginBackgroundTaskWithExpirationHandler:^{

    dispatch_async(dispatch_get_main_queue(),^{

            if(bgTask != UIBackgroundTaskInvalid){

                bgTask = UIBackgroundTaskInvalid;

            }

             });

        }];

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,  0),^{

            dispatch_async(dispatch_get_main_queue(), ^{

               if(bgTask != UIBackgroundTaskInvalid)  {

                    bgTask = UIBackgroundTaskInvalid; }

                });

      });

    

}


  • 2
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值