zoukankan      html  css  js  c++  java
  • 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语言字符串结束符)分隔的字串。

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

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

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

  • 相关阅读:
    【MFC初学】
    【递归】【3月周赛1】【Problem B】
    不管ACM是不是屠龙之技
    【贪心+背包】【HDU2546】【饭卡】
    【精度问题】【HDU2899】Strange fuction
    【泛化物品】【HDU1712】【ACboy needs your help】
    【递推】【HDU2585】【hotel】
    【二进制拆分多重背包】【HDU1059】【Dividing】
    【水:最长公共子序列】【HDU1159】【Common Subsequence】
    【递推+矩阵快速幂】【HDU2604】【Queuing】
  • 原文地址:https://www.cnblogs.com/tara/p/2363398.html
Copyright © 2011-2022 走看看