使用GCDAsyncUdpSocket&GCDAsyncSocket进行TCP连接和UDP连接

使用GCDAsyncSocket创建TCP创建长连接总结:

1、GCDAsyncSocketDelegate代理不执行,产生的原因:对于初始化类需要创建单例对象,有可能是由于它本身的原因到时在代理还未执行完前就已经释放掉了,所以需要采用单例的方式进行初始化。

+(YBSocketClient *)Share
{
    static YBSocketClient *manager=nil;
    static dispatch_once_t once;
    dispatch_once(&once, ^{
        manager=[[YBSocketClient alloc]init];
        dispatch_queue_t mainQueue = dispatch_get_main_queue();
        asyncSocket = [[GCDAsyncSocket alloc] initWithDelegate:manager delegateQueue:mainQueue];
    });
    return manager;
}

2、与服务器连接方法:

 NSError *error = nil;
    if (![asyncSocket connectToHost:@"192.168.3.61" onPort:60000 error:&error])
    {
         NSLog(@"连接失败");
    }

3、连接成功会执行代理

- (void)createSocketConnect:(NSString *)hostAddress hostPort:(NSInteger)port{
    
    dispatch_queue_t mainQueue = dispatch_get_main_queue();
    // Setup logging framework
    asyncSocket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:mainQueue];
    NSError *error = nil;
    if (![asyncSocket connectToHost:@"192.168.3.61" onPort:60000 error:&error])
    {
         NSLog(@"连接失败");
    }
    
    [asyncSocket writeData:[@"123" dataUsingEncoding:NSUTF8StringEncoding] withTimeout:10 tag:1];
}

4、发送数据:

[asyncSocket writeData:[@"123" dataUsingEncoding:NSUTF8StringEncoding] withTimeout:10 tag:1];

5、发送数据的时候有可能会发现接收不到的返回或者不能主动接收服务器发送回来的数据。在连接成功和didReadData这两个代理方法中需要设置超时的时间,要不然在创建完第一次连接后可能socket就已经主动的将该线程关闭掉了导致后面接受不到数据。

设置保持超时的方法:

[sock readDataWithTimeout:-1 tag:200];




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值