美文网首页IOS开发者心得socket通信TCP/UDP/Socket
AsyncSocket 详细介绍(附带粘包解析)

AsyncSocket 详细介绍(附带粘包解析)

作者: ATX | 来源:发表于2016-06-29 12:12 被阅读492次

   项目也完成的差不多了,今天来梳理一下AsyncSocket这个框架的一些使用和应该注意的东西。 公司是做儿童手表的,app要通过服务器来与手表端进行数据交流,在使用即使通信这块,本来打算用xmpp的,后面跟服务器端一起沟通后,就直接用了AsyncSocket + protobuf来与服务器进行数据的交换。关于protobuf的介绍,会在下一篇博客中介绍到。

 1 首先建立一个单例,我这里叫做OnetalkingSocket,单例中含有一个socket属性

在.h文件中包含了端口号和IP两个变量 

@property (nonatomic,copy) NSString *socketHost;

 @property (nonatomic,assign) UInt16 socketPort;

2 建立长连接 在给单例的端口号和IP赋值以后就可以连接了

//连接

3 写数据

(1)id:协议号 

(2)dic:上传的参数 

(3)data:protobuf的类生成的二进制数据 

(4)CallbackStr:上传给服务器后,服务器返回过来的数据

//4 读数据

相关文章

网友评论

  • 獨荹儛臨:楼主我太佩服你了:grin:
  • f367c38c26f7:你好,有demo吗,可不可以看一下,另外问一下,如果是包的格式为前两个字节为长度后面是数据这样的怎么处理半包和粘包,谢谢
    ATX:@userID 那你遇到半包就等下一个包,遇到黏包就拆开,
  • 明天请伪笑:您好,有相应的Demo吗?
  • 42e1c79aee08:楼主,你这个有demo嘛?
    ATX:@赵小三 有啊,我自己写的呢
  • 岁月如歌的季节: //头
    Byte byteHeader[2] = {0x4E,0x4D};
    NSMutableData *dataHeader =[NSMutableData dataWithBytes:byteHeader length:sizeof(byteHeader)];
    //版本号
    Byte byteVersion[4]={0x01,0x00,0x00,0x01};
    NSData *dataVersion =[NSData dataWithBytes:byteVersion length:sizeof(byteVersion)];
    //备用字节
    Byte byteBeiYong[8] = {};
    NSData *dData = [NSData dataWithBytes: &byteBeiYong length: sizeof(byteBeiYong)];
    //时间
    Byte byteTime[7] = {};
    NSData *dataTime =[NSData dataWithBytes:byteTime length:sizeof(byteTime)];
    //命令字
    int btyeOrder = commend;
    NSData *dataOrder = [NSData dataWithBytes:&btyeOrder length: sizeof(btyeOrder)];
    //一位
    Byte byteOne[1] = {};
    NSData *dataOne =[NSData dataWithBytes:byteOne length:sizeof(byteOne)];
    //json体长度
    int strLength = (int)[contentData length];//json体, 文本的字节数
    NSLog(@"%d",strLength);
    int othterLength = 25;//固定的字节数
    int i = strLength + othterLength;
    NSData *data = [NSData dataWithBytes:&i length:sizeof(i)];
    Byte tail[] = {'\0'};
    NSData *dataTail = [NSData dataWithBytes:tail length:sizeof(tail)];
    [dataHeader appendData:data];//长度
    [dataHeader appendData:dataVersion];//版本
    [dataHeader appendData:dData];//备用
    [dataHeader appendData:dataTime];//时间
    [dataHeader appendData:dataOrder];//命令字
    [dataHeader appendData:dataOne];//一位
    [dataHeader appendData:contentData];//json体
    [dataHeader appendData:dataTail];//尾
  • 岁月如歌的季节:你好,我们的数据包的格式为前面25字节为协议数据的长度,中间是发送的协议数据,后面有一个协议字节尾,这个解包粘包怎么做?
    ATX:@岁月如歌的季节 你好,弄好了没有?妈的,这几天一直记得我这个博客里面有个人评论了我,结果老是忘记回复你。你没有弄好的话,加我qq:358460686,我跟你一起研究一下你的那个!

本文标题:AsyncSocket 详细介绍(附带粘包解析)

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