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

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

    else if (sock.userData == SocketOfflineByUser) {

        // 如果由用户断开,不进行重连
        return;
    }else if (sock.userData == SocketOfflineByWifiCut) {

        // wifi断开,不进行重连
        return;
    }

}


在onSocketDidDisconnect回调方法里面,会根据self.socket.userData来判断是否需要重新连接。

 

发送消息

LGSocketServe.h

复制代码
// 发送消息
- (void)sendMessage:(id)message;
LGSocketServe.m

 

//设置写入超时 -1 表示不会使用超时
#define WRITE_TIME_OUT -1

- (void)sendMessage:(id)message
{
    //像服务器发送数据
    NSData *cmdData = [message dataUsingEncoding:NSUTF8StringEncoding];
    [self.socket writeData:cmdData withTimeout:WRITE_TIME_OUT tag:1];
}

//发送消息成功之后回调
- (void)onSocket:(AsyncSocket *)sock didWriteDataWithTag:(long)tag
{

}


发送消息成功之后会调用onSocket:didWriteDataWithTag:,在这个方法里可以进行读取消息。

 

接受消息

LGSocketServe.m

复制代码
//设置读取超时 -1 表示不会使用超时
#define READ_TIME_OUT -1

 

#define MAX_BUFFER 1024

//发送消息成功之后回调
- (void)onSocket:(AsyncSocket *)sock didWriteDataWithTag:(long)tag
{
    //读取消息
    [self.socket readDataWithTimeout:-1 buffer:nil bufferOffset:0 maxLength:MAX_BUFFER tag:0];
}

//接受消息成功之后回调
- (void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag
{
    //服务端返回消息数据量比较大时,可能分多次返回。所以在读取消息的时候,设置MAX_BUFFER表示每次最多读取多少,当data.length < MAX_BUFFER我们认为有可能是接受完一个完整的消息,然后才解析