原创作品,转载请标明http://blog.csdn.net/jackystudio/article/details/17347069

这里采用Apache+php搭建了一个简易服务器,服务端用php语言,客户端采用cocos2d-x的CCHttpClient类通过http方式访问服务端资源。模拟了cocos2d-x提交账户和密码到服务端,服务端校验帐号密码,如果正确返回客户端成功登录,如果错误则返回错误信息,同时在服务端后台保存登录log。第一次接触php,语法上和C/C++还是蛮像的,主要是给出一个cocos2d-x网络实例,代码中并没有做一些防呆纠错措施。

1.搭建Apache+php网页服务器

Apche2.2 x86版下载地址:http://pan.baidu.com/s/1vNuLF

php5.2.17版下载地址:http://pan.baidu.com/s/17sFoN

搭建过程参见http://tech.163.com/06/0206/11/299AMBLT0009159K.html,这里就不安装MySQL了。

搭建成功后,打开http://127.0.0.1,就可以看到"It' works!"字样。同时打开Apache monitor监控Apache处于运行状态。我这里使用的80端口。

2.php收集表单的方式

Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE,对应着查改增删,这里介绍GET和POST。

用$_GET获取表单数据,表单数据对任何人都是可见的,比如

http://www.w3school.com.cn/welcome.php?username=jackystudio&password=123
http://www.w3school.com.cn/welcome.php
详细可见http://www.w3school.com.cn/php

3.服务器php处理代码

3.1.采用get方式代码

[php] view plaincopy
  1. <html>
  2. <body>
  3. <?php
  4. $open=fopen("log.txt","a" ); //Save password
  5. if(isset($_GET["username"]) && isset($_GET["password"]))
  6. {
  7. if($_GET["username"]=="jackystudio" && $_GET["password"]=="123")
  8. {
  9. fwrite($open,"Username:".$_GET["username"]);
  10. fwrite($open,"\r\n");
  11. fwrite($open,"Password:".$_GET["password"]);
  12. echo "Login Success"; //return to client
  13. }
  14. else
  15. {
  16. fwrite($open,"Wrong Username or password!");
  17. echo "Login Failed"; //return to client
  18. }
  19. }
  20. else
  21. {
  22. fwrite($open,"No password");
  23. echo "No Username or Password"; //return to client
  24. }
  25. fclose($open);
  26. ?>
  27. </body>
  28. </html>

3.2.采用post方式代码

[php] view plaincopy
  1. <html>
  2. <body>
  3. <?php
  4. $open=fopen("log.txt","a" ); //Save password
  5. if(isset($_POST["username"]) && isset($_POST["password"]))
  6. {
  7. if($_POST["username"]=="jackystudio" && $_POST["password"]=="123")
  8. {
  9. fwrite($open,"Username:".$_POST["username"]);
  10. fwrite($open,"\r\n");
  11. fwrite($open,"Password:".$_POST["password"]);
  12. echo "Login Success"; //return to client
  13. }
  14. else
  15. {
  16. fwrite($open,"Wrong Username or password!");
  17. echo "Login Failed"; //return to client
  18. }
  19. }
  20. else
  21. {
  22. fwrite($open,"No password");
  23. echo "No Username or Password"; //return to client
  24. }
  25. fclose($open);
  26. ?>
  27. </body>
  28. </html>

4.cocos2d-x使用CCHttpClient类进行网络请求

CCHttpClient的使用这里也不赘述了,请移步官方文档How_to_use_CCHttpClient。这里在上文编辑框和点九图的基础上进行了修改。2个编辑框,分别是username和password。一个按钮点击发送请求。一个文本显示从服务器返回的结果。

4.1.按钮请求处理

[cpp] view plaincopy
  1. void TestLayer::btncallback( CCObject* pSender )
  2. {
  3. bool requestType_is_get=true;//采用get方式或者post方式
  4. if (requestType_is_get)
  5. {
  6. CCHttpRequest* request = new CCHttpRequest();//创建请求对象
  7. string str1 = "127.0.0.1:80/index.html?";
  8. string str2 = p_User_EditBox->getText();//获取username编辑框内容
  9. string str3 = p_Psw_EditBox->getText();//获取password编辑框内容
  10. string struser="username=";
  11. string strpsw="&password=";
  12. str1=str1+struser+str2+strpsw+str3;
  13. request->setUrl(str1.c_str());//设置请求的url,username和password已经包含在url中
  14. request->setRequestType(CCHttpRequest::kHttpGet);//设置为Get模式
  15. request->setResponseCallback(this, httpresponse_selector(TestLayer::onHttpRequestCompleted));//设置响应的回调
  16. request->setTag("GET test");
  17. CCHttpClient::getInstance()->send(request);//发送请求
  18. request->release();//释放请求
  19. }
  20. else
  21. {
  22. CCHttpRequest* request = new CCHttpRequest();//创建请求对象
  23. string str1 = "127.0.0.1:80/index.html";
  24. string str2 = p_User_EditBox->getText();
  25. string str3 = p_Psw_EditBox->getText();
  26. string struser="username=";
  27. string strpsw="&password=";
  28. str2=struser+str2+strpsw+str3;
  29. request->setUrl(str1.c_str());//设置请求的url,只是请求页面的url,并不包含username和password
  30. request->setRequestType(CCHttpRequest::kHttpPost);//设置为Post模式
  31. request->setResponseCallback(this, httpresponse_selector(TestLayer::onHttpRequestCompleted));//设置响应的回调
  32. const char* postData = str2.c_str();
  33. request->setRequestData(postData, strlen(postData));//设置请求数据,也就是username和password
  34. request->setTag("POST test");
  35. CCHttpClient::getInstance()->send(request);//发送请求
  36. request->release();//释放请求
  37. }
  38. }

4.2.响应回调处理

[cpp] view plaincopy
  1. void TestLayer::onHttpRequestCompleted( CCHttpClient* client, CCHttpResponse* response )
  2. {
  3. if (!response->isSucceed())//如果响应失败,输出错误信息
  4. {
  5. CCString strError;
  6. strError.initWithFormat("Receive Error! \n%s\n",response->getErrorBuffer());
  7. m_labelStatusCode->setString(strError.getCString());
  8. return ;
  9. }
  10. std::vector<char> *buffer = response->getResponseData();//接收响应信息
  11. string recieveData;
  12. for (unsigned int i = 0; i < buffer->size(); i++)
  13. {
  14. recieveData += (*buffer)[i];
  15. }
  16. size_t begin= recieveData.find("<body>")+6;//这里简单处理,获取<body>标签内数据,即是响应内容
  17. size_t end= recieveData.find("</body>");
  18. string result(recieveData,begin,end-begin);
  19. m_labelStatusCode->setString(result.c_str());
  20. }

5.效果图

5.1.Apache运行(Get和Post两种效果都是一样的)

(1)帐号密码正确时

(2)帐号密码错误时

5.2.关闭Apache

6.源码下载

下载地址:http://download.csdn.net/detail/jackyvincefu/6713471

【玩转cocos2d-x之三十一】弱联网与服务器的通讯相关推荐

  1. Unity3d搭建HTTP弱联网的服务器搭建及客户端编写(一)之java服务器

    HTTP弱联网java服务器 HTTP弱联网java服务器 通过tomcat搭建java服务器linux 1java环境搭建 2tomcat环境搭建 3服务器搭建 下一篇php服务器 通过tomcat ...

  2. 海量之道之弱联网优化

    前言 [弱联网优化]作为海量之道2.0系列课题的基础方法论之一,望文生义,想必定是卖弄移动网络信号不佳时如何优化的奇技淫巧.恭喜你,感觉靠谱,不过我们还想多聊一点其它话题. 移动互联网颠覆着我们的生活 ...

  3. 手游弱联网手游如何防作弊

    本文是看到<乐元素CTO凌聪:弱联网手游如何防作弊?>之后,我觉得这篇文章讲的东西都很实用,贴合我们实际,比你看那些理论的书籍强多了,而且也非常佩服乐元素能把这些东西拿出来讲,虽然在某些人 ...

  4. 移动网络为什么“慢”? 腾讯工程师分享弱联网优化之道

    一.移动网络的特点 我们看到移动网络和移动互联网时代用户的行为有如下三个典型特点: 1)移动状态网络信号不稳定,高时延.易抖动丢包.通道狭窄: 2)移动状态网络接入类型和接入点变化频繁: 3)移动状态 ...

  5. SAP UI5 应用开发教程之三十一 - SAP UI5 的路由历史和路由回退(Routing back and history)试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...

  6. 单机 amp; 弱联网手游 防破解、金币改动 简单措施

    单机 & 弱联网手游 防破解.金币改动 简单措施 手游经常使用破解方法 对于一个弱联网或者单机游戏,能够从下面方面去破解: 1.找得到存档文件的,直接破解改动存档文件. 2.找不到存档文件,就 ...

  7. Citrix 服务器虚拟化之三十一 XenApp 6.5负载均衡

    Citrix 服务器虚拟化之三十一 XenApp 6.5负载均衡 说明:       环境基于实验三十 1.准备一台Windows Server 2008 R2的虚拟机名为XenAPP2,然后加入域k ...

  8. 【放置江湖】弱联网手游,网络协议分析修改。每天签到可获得35元宝

    [放置江湖]弱联网手游,网络协议分析修改教程. 每天签到可获得35元宝,开启方法,WLAN ->已连接的wifi (>)小图标 -> 代{过}{滤}理 ->代{过}{滤}理自动 ...

  9. PX4模块设计之三十一:ManualControl模块

    PX4模块设计之三十一:ManualControl模块 1. ManualControl模块简介 2. 模块入口函数 2.1 主入口manual_control_main 2.2 自定义子命令cust ...

最新文章

  1. winformDatagridview无法编辑的问题
  2. oracle exp/imp命令详解
  3. Linux与JVM的内存关系分析
  4. javascript学习1---用dom对象动态控制表格
  5. QTcreator 多线程(生产者消费者)
  6. 【django】使用虚拟环境
  7. 数据绑定(三)为Binding指定绑定源的几种方法
  8. 周志华机器学习课后习题解析【第二章】
  9. 深入理解计算机系统(4.2)---硬件的魅力
  10. decimal(10,2) 的含义
  11. java简单小项目_java入门简单小项目有哪些?适合java初学者项目
  12. Easy Audio CD Burner 算法分析及逆向推算(图)
  13. KEPServerEX 6.7.1046.0 新版本功能大全
  14. python函数之enumerate()快速打印出列表中的元素以及对应的下标
  15. 如何静下心做些事情呢
  16. TensorFlow2.8.0报错TypeError: Descriptors cannot not be created directly.
  17. Linux 帮助手册安装
  18. selenium下对指定元素进行截图
  19. DailyFi - 9.23|Dapper Labs 完成2.5亿美元融资,Vera 在 Polkastarter 上启动IDO
  20. Xlsx转Json(JS Object/Array) Javascript/Typescript版本

热门文章

  1. Redisson分布式锁实战-1:构建分布式锁
  2. c语言通讯录以及写入文件,学C三个月了,学了文件,用C语言写了个通讯录程序...
  3. java log4j 多个文件_java – Log4j:每个请求一个日志文件
  4. Java8函数式编程(3)--规约操作
  5. Java多线程之一:进程与线程
  6. 每天一个Linux命令之ps-查看系统进程信息
  7. mysql怎样查询表的信息!
  8. 双系统Ubuntu无法访问windows磁盘分区解决方法
  9. java不带package和带package的编译方式
  10. Javascript面向对象编程(二) 构造函数的继承