• iPhone客户端开发笔记(六)


    进入第六天,今天主要解决以下问题:

    1,调试UDP广播自动发现网关IP。

    2,调试双连接并发登录网关。

    3,调试网关反馈场景数据的拆解。

    4,调试场景名称和类型的刷新。

    5,调试自动登录、界面切换功能。

    1,obj-c中的self并非c++中的this。

    in interface “NetStreamMgr”:

    +(void) detectingIharbor{

    AsyncUdpSocket * udpSocket = [[AsyncUdpSocket alloc] initWithDelegate:self];

    通过udpSocket发送UDP广播;

    }

    下面的回调函数,也定义在NetStreamMgr中,收到广播回复后会被调用:

    -(BOOL)onUdpSocket:(AsyncUdpSocket *)sock didReceiveData:(NSData *)data withTag:(long)tag fromHost:(NSString *)host port:(uint16_t)port{

    }

    对于“静态方法”detectingIharbor,这里面的self到底指的是谁?

    [NetStreamMgr detectingIharbor]; // 成功执行,但收不到回馈,亦即进入不到onUdpSocket中。

    将“静态方法”换成非静态,并这样调用:

    NetStreamMgr * mgr = [NetStreamMgr alloc] init];

    [mgr detectingIharbor];               // 成功执行,并且能收到反馈。

    2,将GB2312编码字串转换为UTF8。

    NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);

    NSString * converted = [NSString stringWithCString: originalBuffer encoding:enc];

    核心在enc的获取。NS库中没有gb编码的定义(反而有日文编码定义),必须从另一个库的编码转换过来。

    CFStringConvertEncodingToNSStringEncoding函数参数还有个叫kCFStringEncodingGB_2312…,用这个就不行。留存疑问。

    3,对协议缓冲区进行处理。

    在对自定义协议进行处理时,使用NSString的-componentsSeparatedByString分割字串,失败,仍然把整串返回。

    再使用strtok_r也不行,最后才恍然大悟:

    目标串并非真的字符串,而是以‘;’(分号)分隔,分号内又是一个个以’\0’(C语言字符串结束符)分隔的字串。

    以上两个函数在目标串中搜索分号,遇到第一个字符串结束标志,没有找到分号,直接返回,分隔失败。

    后来使用挨个字符比较的方式对目标内存进行处理,才把真正的字串分离出来。

    糊里糊涂写程序,想当然写程序,简直是我的两大特长。

  • 相关阅读:
    实验5 函数
    实验4 在分支循环结构中调用自定义函数
    Play 内置标签
    POI 正常输出WORD 文档
    用户WORD模板写文件
    Spring 注解过滤
    Spring 循环依赖
    Spring 表单标签
    WebService 客户端生成服务端代码
    Jquery 常用函数
  • 原文地址:https://www.cnblogs.com/tara/p/2363398.html
Copyright © 2020-2023  润新知