iOS Developer

iOS socket 发送16进制

2016-12-07  本文已影响0人  slimsallen

项目中用到了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];

}

上一篇下一篇

猜你喜欢

热点阅读