原创作品,转载请标明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. MPEG2-TS的小结 [1]
  2. JavaScript绑定事件的方法[3种]
  3. UITableView性能优化与卡顿
  4. mac按文件名查找文件_如何在Mac上查找和删除大文件
  5. excel条形码字体_在Excel中批量生成条形码,竟如此简单!
  6. 这边本来有1个人,现在没了:你有没有想过有一天自己也会被取代
  7. libssl-dev linux下载,libssl
  8. 断供后,英特尔再宣布暂停在俄罗斯业务,立即生效
  9. 深山红叶PE工具箱嫦娥一号纪念版
  10. 计算机主机板开机原理与维修,主机板损坏电脑会出现什么现象
  11. 实验2:MIPS指令系统和MIPS体系结构
  12. vscode remote-ssh连接ubuntu子系统提示错误:WSL: VSCode server install fails on Ubuntu 19.10
  13. python变量赋值方式_python中变量的命令规制及变量的赋值方式
  14. Neutron 理解 (6): 如何实现虚拟三层网络
  15. JS中操作<select>标签选的值
  16. 神经网络正向传播和反向传播
  17. Linux C/C++ 学习路线
  18. MT6739 camera AF驱动移植
  19. 联想学生机器出现网络连接不上的原因
  20. Qt系列——炫酷的Qt APP+STM32平衡小车

热门文章

  1. 上传图片-服务端-Api接口定义
  2. 微服务发现组件Eureka:简介以及Eureka服务端开发
  3. ServletContext_概述
  4. Response_案例1_路径_绝对路径
  5. linux系统管理试卷必修B卷,2013-2014Linux系统管理试卷
  6. Java8函数式编程(4)--终止操作(源码)
  7. VMware Workstation Pro 16 安装教程
  8. 淘淘商城项目分析报告
  9. 在 Go 语言中,如何正确的使用并发
  10. 设计模式(Design Patterns)详解