美文网首页
iOS socket 自定义协议

iOS socket 自定义协议

作者: kenewang | 来源:发表于2017-06-01 15:45 被阅读455次
    /*
     typedef struct NetStruct_twoData
     {
     int header;//包头
     int length;//包总长度
     int cmd;//信号令
     int num;//数据条数
     int dataNum;//字段数
     int dataType_one;//字段类型
     int dataType_two;//字段类型
     int dataLength_one;//字段长度
     int dataLength_two;//字段长度
     int data[50];//字段
     Byte verify;//校验
     Byte version;//版本号
     int tail;//包尾
     */
    

    事例代码(发送一个心跳包):

    - (NSData*)heartBeat
    {
        unsigned int   header = 0x12345678;
        unsigned int length = (unsigned int)(8*4+2+4);
        unsigned int cmd = 0x00000000;
        unsigned int num = 0x00000001;
        unsigned int datanum = 0x00000001;
        unsigned int dataType_one = 0x00000002;
        unsigned int dataLength_one = 4;
       // 大小端转换
        header = CFSwapInt32BigToHost(header);
        length = CFSwapInt32BigToHost(length);
        cmd = CFSwapInt32BigToHost(cmd);
        num = CFSwapInt32BigToHost(num);
        datanum = CFSwapInt32BigToHost(datanum);
        dataType_one = CFSwapInt32BigToHost(dataType_one);
        dataLength_one = CFSwapInt32BigToHost(dataLength_one);
        
        NSMutableData * contentData = [[NSMutableData alloc]init];
        [contentData appendBytes:&header length:4];
        [contentData appendBytes:&length length:4];
        [contentData appendBytes:&cmd length:4];
        [contentData appendBytes:&num length:4];
        [contentData appendBytes:&datanum length:4];
        [contentData appendBytes:&dataType_one length:4];
        [contentData appendBytes:&dataLength_one length:4];
        [contentData appendBytes:"abcdefghui" length:4];
        
        Byte * dataString = (Byte *)[contentData bytes];
        Byte eox;
        memcpy(&eox, dataString, 1);
        for (NSUInteger i = 1 ; i < contentData.length; i ++) {
            eox = eox^dataString[i];
        }
        [contentData appendBytes:&eox length:1];
        
        
        unsigned int version = 0x01;
        unsigned int tail = 0x87654321;
        
        tail = CFSwapInt32BigToHost(tail);
        
        [contentData appendBytes:&version length:1];
        [contentData appendBytes:&tail length:4];
        
        return contentData;
    }
    

    具体调用代码:
    结合第三方的GCDAsyncSocket开源代码,保持心跳包

    GCDAsyncSocket * _sendSocket;
    //创建一个后台队列等待接受数据
     dispatch_queue_t dQueue = dispatch_queue_create("socket queue", NULL);
     if (_sendSocket == nil) {
          _sendSocket  = [[GCDAsyncSocket alloc]initWithDelegate:self delegateQueue:dQueue socketQueue:nil];
     }
    
    [_sendSocket writeData:data withTimeout:-1 tag:10];
    

    相关文章

      网友评论

          本文标题:iOS socket 自定义协议

          本文链接:https://www.haomeiwen.com/subject/ogrefxtx.html