参考:

 
目的:
1 取得POST消息的消息体
2 使用JSON格式化
3 使用AES对信息加密(可选)
 
昨天的代码还没有解析到客户端传过来的数据,今天有时间搜索了一下,当前解析以POST方法传过来的数据的方法如下:
 
 
目前已经可以读到客户端传过来的内容,如下:
 
只是为毛后面多了个"&"符号呢,不解。
 
查看了一下CCHTTPReqest.cpp的源码,如下:
似乎是每个参数后面必加的,
由于it是一个迭代器来的,理论上可以考虑使用it.->hasNext()判断在加"&"符号,具体我就不操作了。
处理起来比较麻烦,于是用了个简单点的处理方法,在服务端处理的时候,直接判断最后一个字符是否是"&",是的话就删掉,如下:
 
 
 
测试了一下,结果是自己预期的。
 
嗯,仔细看了一下CCHTTPReqest.cpp的源码,发现了一个CCHTTPRequest::setPOSTData(const char *data)的接口,不用传名值对进去,测试可用。
 
下面测试用JSON来处理通讯对象吧。
 
前端的通讯代码修改如下:
 
服务端读取代码如下:
 
 
然后我们在测试的地方这样写:
 
然后刷新客户端,服务端收到讯息如图:
客户端打印日志如下:
 
一切都按照设计好的走,呵呵。
 
好的,下面我们进行加密操作。
 
在客户端代码中敲一下crypto,然后会看到可供选择的加密方式有很多种,包括:AES256,MD5,XXTEA等等,如下:
 
一直没用过AES加密,何不试试呢。
 
服务端也需要安装对应的AES加密包,此处下载python的第三方加密包,
 
然后解压缩到根目录下运行 python setup.py install口令之后,Eclipse会自动集成到里头去的。
 
 
我们可以在Eclipse里面直接连接到代码里面去,可以看到这个AES支持3种类型的AES密钥,如果要使用AES256的话,那么密钥的长度应该是32.
我们就用32个"#"作为我们的密钥吧。
 
客户端代码:
 
服务端代码:
 
然后重启服务器,刷新客户端,赫然发现:
 
本平台不支持此功能,我擦。
 
那么换成XXTEA吧,
 
客户端,正常:
 
服务端也要装第三方的库,地址:
https://pypi.python.org/pypi/xxtea
 
安装同上。
 
服务端代码如下:
 
运行下看看结果:
报错了,需要一个16字节的key,好吧,变成16个"#"好么?
前后端都改掉了。
 
重启服务端,刷新客户端,结果看看如何:
 
好吧,解析正常了。
 
但是后面的乱码是闹那样啊?!!
 
在客户端和服务端都打上了长度的输出,结果都是32。
 
难道是编码问题?
将前后端的编码格式统一为UTF-8,还是没用。
 
于是在前后端打日志查看数据加密前与加密后的长度。
发现,前端加密前25,加密后32。
服务端解密钱32,解密后32。
这个解密后的数据拿去给JSON解析的话,肯定是会报错的。
 
问题就出现在这个解密后多出来的25-32的字符串了。
 
通过阅读加密源代码:
 
发现利用xxtea加密和解密字符串都会将字符串变成4的倍数的长度,不足的地方会通过"\0"补位,于是在服务端添加代码确认,确认第25个字符确实是"\0"。
 
在服务端的假设一下代码:
 
但是可以看到,长度变为29了。
 
打印一下"\0"的index,还是25,累啊!也就是说25-29还是"\0"。
 
于是加了一个循环出处理这个字符串:
 
结果呢:
呵呵,死循环了。
 
吗蛋。
字符串是以"\0"结束的,不是吗?
 
心好累,搜索了一下,看到了这个帖子,感觉要放弃加密了:
 
额。继续!
 
心塞,打印了一下多出来的字符串的每一个单位,发现一个乱码不是"\0":
 
额。
 
搞了好久,还是不止是咋回事,这个乱码的ASCII码打印出来都是乱码。
 
含泪注释掉前后端的加密,然后运行,OK。
我可以回家了么。!!-_-
 
服务器源码:https://github.com/AdoBeatTheWorld/waytomobile/tree/master/projects/ServerTest
客户端源码:https://github.com/AdoBeatTheWorld/waytomobile/tree/master/projects/game003

Quick Cocos2dx Http通讯 JSON的更多相关文章

  1. Quick Cocos2dx Http通讯

    服务端:Python 通讯协议:Http 参考文章: 1 用python实现一个基本的http server服务器 http://blog.sina.com.cn/s/blog_416e3063010 ...

  2. quick cocos2dx 3.x 配置win32工程

    公司项目主体部分用c++,而ui部分用lua写,所以选择了用quick框架.项目先开发了ios/mac版,这两天试着配置其win32工程,遇到一些问题,记录一下(纯c++版本cocos2dx配置方法应 ...

  3. quick cocos2d-x 入门---井字棋

    学习quick cocos2d-x 第二天 ,使用quick-x 做了一个井字棋游戏 . 我假设读者已经 http://wiki.quick-x.com/doku.php?id=zh_cn阅读了这个链 ...

  4. Mac下搭建quick cocos2d-x编译环境

    一. 我知道在你的电脑中一定已经安装好了Xcode(没有自己下载去吧),打开Xcode,开启"偏好设置"对话框(commond + ,).假设打开之后出现的是这种一个对话框,那么直 ...

  5. 用Quick Cocos2dx做一个连连看(一)

    呵呵,不知道能不能坚持下来,先写着吧. 预备知识:Quick Cocos2dx 2.2.5基本知识 或者 Cocos2dx基本知识, lua入门 开发工具:Sublime Text 2.0/3.0 原 ...

  6. quick cocos2d-x 2.2.4 window环境调试

    BabeLua简介 BabeLua是一款基于VS2012/2013(简称VS)的免费开源的Lua集成开发环境,在Lua编辑和调试方面,具有如下功能和特性: ●Lua语法高亮 ●语法检查 ●自动补全 ● ...

  7. Mac在结构quick cocos2d-x编译环境

    关于 Quick 很多其它的使用说明可參考安装文件夹下的 README 文件. Quick-Coco2d-x开发工具 普通情况下,我们通常都会採用Cocos Code IDE作为开发工具来高速开发游戏 ...

  8. Cocos2d-x 3.0 Json用法 Cocos2d-x xml解析

    Cocos2d-x 3.0 加入了rapidjson库用于json解析.位于external/json下. rapidjson 项目地址:http://code.google.com/p/rapidj ...

  9. quick cocos2dx lua 内存释放

    前言 对于内存的优化,网上有很多例子和教程.总体来说,就那么几种解决方案,在最后我会简单提下,这里先说下在quick中,对于图片的处理. 1.查看内存调试信息 对于quick框架的了解,我们可以参考\ ...

随机推荐

  1. Spring 实例化bean的三种方式:

    方法一:使用构造器实例化bean java代码: package com.model; public class User { private String username; public User ...

  2. su -无反应

    一.问题产生环境 CentOS 6.3 X64SecureCRT 7.0.0 英文版 二.问题具体描述 今天操作自己的一台Linux服务器时,突然su命令不好使了,敲入命令回车后,没有任何反应,不管是 ...

  3. VVDocumenter安装过程的一些问题

    vvdocument是瞄神写的一个插件 作用的话大家都知道 这里就不多说了 插件下载地址:https://github.com/onevcat/VVDocumenter-Xcode 1.下载后解压 编 ...

  4. MyEclipse 2015 如何使项目能够使用 Hibernate自动生成文件

    在MyEclipse-Project facets 下 对hibernate这一栏打钩即可

  5. js.map error

    1. 问题:      1.1 通过bower install 的components 许多在运行的时候报404无法找到js.map文件, 如图:          2. 分析:     2.1 查看 ...

  6. Hibernate 系列教程7-双向一对一

    双向一对一 一对一主要用在 一个一方需要的信息比较少,比如注册的登录信息 另一个一方存储的信息比较多,比如注册之后用户填写的详细信息 实现方式常用的主要有2种: java模型都是一样,其中一个映射文件 ...

  7. 【转】从1到N这N个数中1的出现了多少次?

    给定一个十进制整数N,求出从1到N的所有整数中出现"1"的个数. 例如:N=2,1,2出现了1个"1". N=12,1,2,3,4,5,6,7,8,9,10,1 ...

  8. oracle 锁表的处理。

    最近系统每天经常锁表,进程杀死后,很快再次锁住这个表. (一)先贴出现场处理死锁的步骤. 另外:有时候通过PL/SQL执行kill session可能仍然无法解锁,此时需要登陆到Oracle服务器将进 ...

  9. PHP DES加密

    public function encrypt($str) { //$str = "hh"; $key = "key:123";//密钥 $cipher = M ...

  10. swift(2)元祖(Tuple)

    let somePoint = (, ) switch somePoint { , ): // 位于远点 println("(0, 0) is at the origin") ): ...