美文网首页iOS Developer
iOS socket 发送16进制

iOS socket 发送16进制

作者: slimsallen | 来源:发表于2016-12-07 13:45 被阅读0次

    项目中用到了socket 所以和大家分享一下。

    首先我们需要在项目导入GCDAsyncSocket,这个网上的下载地址很多。

    创建tcp socket   实现代理GCDAsyncSocketDelegate

     - (void) createClientTcpSocket {

    dispatch_queue_t dQueue = dispatch_queue_create("client tdp socket", NULL);

    // 1. 创建一个 socket用来和服务端进行通讯

    sendTcpSocket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dQueue socketQueue:nil];

    // 2. 连接服务器端. 只有连接成功后才能相互通讯 如果60s连接不上就出错 超时时间自己设置

    [self connectSevers];

    }

    -(void)connectSevers{

    NSString *host = @"your host";

    uint16_t port = @"your port";

    [sendTcpSocket connectToHost:host onPort:port withTimeout:60 error:nil];

    }

    #pragma mark - 代理方法表示连接成功/失败 回调函数

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

    NSLog(@"连接成功");

    [sock readDataWithTimeout:-1 tag:200];

    //成功后的操作

    }

    - (void)socketDidDisconnect:(GCDAsyncSocket *)sock withError:(NSError *)err {

    NSLog(@"连接失败 %@", err);

    dispatch_sync(dispatch_get_main_queue(), ^{

    [MBProgressHUD showError:@"连接失败" toView:nil];

    });

    // 断线重连

    //[self connectSevers];

    }

    #pragma mark - 消息发送成功 代理函数

    - (void)socket:(GCDAsyncSocket *)sock didWriteDataWithTag:(long)tag {

    NSLog(@"消息发送成功");

    }

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

    //接收到服务器返回

    }

    //向服务器发送指令

    //传入16进制字符即ke

    //处理数据 根据服务器要求 进行转换即可

    - (void)sendMessageForservers:(NSString *)message {

    NSString *hexString = message; //16进制字符串

    int j=0;

    Byte bytes[8];//根据自己的要求 设置 位数

    for(int i=0;i<[hexString length];i++)

    {

    int int_ch;  /// 两位16进制数转化后的10进制数

    unichar hex_char1 = [hexString characterAtIndex:i]; ////两位16进制数中的第一位(高位*16)

    int int_ch1;

    if(hex_char1 >= '0' && hex_char1 <='9')

    int_ch1 = (hex_char1-48)*16;  //// 0 的Ascll - 48

    else if(hex_char1 >= 'A' && hex_char1 <='F')

    int_ch1 = (hex_char1-55)*16; //// A 的Ascll - 65

    else

    int_ch1 = (hex_char1-87)*16; //// a 的Ascll - 97

    i++;

    unichar hex_char2 = [hexString characterAtIndex:i]; ///两位16进制数中的第二位(低位)

    int int_ch2;

    if(hex_char2 >= '0' && hex_char2 <='9')

    int_ch2 = (hex_char2-48); //// 0 的Ascll - 48

    else if(hex_char1 >= 'A' && hex_char1 <='F')

    int_ch2 = hex_char2-55; //// A 的Ascll - 65

    else

    int_ch2 = hex_char2-87; //// a 的Ascll - 97

    int_ch = int_ch1+int_ch2;

    NSLog(@"int_ch=%d",int_ch);

    bytes[j] = int_ch;  ///将转化后的数放入Byte数组里

    j++;

    }

    NSData *newData = [[NSData alloc] initWithBytes:bytes length:8];//length 根据自己要求设置

    [sendTcpSocket writeData:newData withTimeout:-1 tag:0];

    }

    相关文章

      网友评论

        本文标题:iOS socket 发送16进制

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