您的位置:首页 > 其它

iPhone客户端开发笔记(六)

2012-02-22 16:44 190 查看
进入第六天,今天主要解决以下问题:

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语言字符串结束符)分隔的字串。

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

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

糊里糊涂写程序,想当然写程序,简直是我的两大特长。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: