iOS应用中使用AsyncSocket库处理Socket通信的用法讲解

2020-01-15 15:07:17王冬梅

    NSString *longConnect = @"connect is here";
    NSData   *data  = [longConnect dataUsingEncoding:NSUTF8StringEncoding];
    [self.socket writeData:data withTimeout:1 tag:1];
}


在连接成功的回调方法里,启动定时器,每隔2秒向服务器发送固定的消息来检测长连接。(这个根据服务器的需要就可以了)

 

断开连接

1,用户手动断开连接

LGSocketServe.h

复制代码
// 断开socket连接
-(void)cutOffSocket;
LGSocketServe.m

 

-(void)cutOffSocket
{
    self.socket.userData = SocketOfflineByUser;
    [self.socket disconnect];
}


cutOffSocket是用户断开连接之后,不在尝试重新连接。

 

2,wifi断开,socket断开连接

LGSocketServe.m

复制代码
- (void)onSocket:(AsyncSocket *)sock willDisconnectWithError:(NSError *)err
{

 

    NSLog(@" willDisconnectWithError %ld   err = %@",sock.userData,[err description]);
    if (err.code == 57) {
        self.socket.userData = SocketOfflineByWifiCut;
    }

}


wifi断开之后,会回调onSocket:willDisconnectWithError:方法,err.code == 57,这个时候设置self.socket.userData = SocketOfflineByWifiCut。

 

重新连接

socket断开之后会回调:

LGSocketServe.m

复制代码
- (void)onSocketDidDisconnect:(AsyncSocket *)sock
{

 

    NSLog(@"7878 sorry the connect is failure %ld",sock.userData);

    if (sock.userData == SocketOfflineByServer) {
        // 服务器掉线,重连
        [self startConnectSocket];
    }