在使用CCHttpClient前首先需要搭建一个Apache服务器
搭建Apache服务器和使用Apache服务器的方法可以参考下面的博客:
在Windows下搭建Apache服务器:http://blog.csdn.net/houjia159/article/details/43453325
开发基于Apache服务器上的CGI程序:http://blog.csdn.net/houjia159/article/details/43453351
一步一步教你使用CGI实现一个简单的后门:http://blog.csdn.net/houjia159/article/details/43453361
程序实例1:在Cocos2d-X中使用CCHttpClient实现登陆验证
#include <stdio.h> #include <stdlib.h> #include <string.h> void main() { //设置HTML语言 printf("Content-type:text/html\n\n"); //通过环境变量得到用户传递的参数 char* queryString = getenv("QUERY_STRING"); //分解字符串queryString //将字符串queryString分割成两个字符串,'|'为分隔符 char* username = strtok(queryString,"|"); char* password = strtok(NULL,"|"); //判断用户名和密码是否输入正确 if(0 == strcmp(username,"aaa") && 0 == strcmp(password,"bbb")) { printf("Login success !<br>"); } else { printf("Login Error !<br>"); } }
编译成功后将程序复制到Apache服务器中
在浏览器中输入:http://localhost/cgi-bin/login.cgi?aaa|bbb
在浏览器中输入:http://localhost/cgi-bin/login.cgi?aaaa
通过上面的例子证明服务器端的程序编译成功,并且程序实现了一个简单的验证,当用户传递的参数是aaa|bbb时验证成功,当用户传递的参数不是aaa|bbb时验证失败
客服端的代码
当Cocos2d-X作为客服端执行这个程序时,首先创建一个HttpClient类,在HttpClient.h中添加下面的代码
#ifndef __HttpClient_H__ #define __HttpClient_H__ #include "cocos2d.h" #include "cocos-ext.h" using namespace cocos2d::extension; USING_NS_CC; class HttpClient : public CCLayer { public: static CCScene* scene(); CREATE_FUNC(HttpClient); bool init(); void httpResponse(CCHttpClient* client,CCHttpResponse* response); }; #endif
#include "HttpClient.h" CCScene* HttpClient::scene() { CCScene* s = CCScene::create(); HttpClient* layer = HttpClient::create(); s->addChild(layer); return s; } bool HttpClient::init() { CCLayer::init(); //获得网络共享实例 CCHttpClient* httpClient = CCHttpClient::getInstance(); //创建一个请求 CCHttpRequest* request = new CCHttpRequest; //设置请求访问的地址 request->setUrl("http://localhost/cgi-bin/login.cgi?aaa|bbb"); //设置响应回调函数,读取response request->setResponseCallback(this,httpresponse_selector(HttpClient::httpResponse)); //设置请求的类型 (GET、POST等) request->setRequestType(CCHttpRequest::kHttpGet); //发送请求 httpClient->send(request); //释放请求 request->release(); return true; } //定义HttpClient的响应函数 void HttpClient::httpResponse(CCHttpClient* client,CCHttpResponse* response) { //如果访问服务器失败 if (!response->isSucceed()) { //定义一个指针保存错误信息 const char* err = response->getErrorBuffer(); //打印错误信息 CCLog("response error = %s",err); return; } //创建一个向量保存服务器中传过来的数据 std::vector<char>* vChar = response->getResponseData(); std::string str; vector<char>::iterator it; for (it = vChar->begin(); it != vChar->end(); it++) { str += *it; } //打印服务器传到客服端的数据 CCLog("%s",str.c_str()); }
执行结果:
将HttpClient.cpp下的HttpClient::init()中的
//设置请求访问的地址 request->setUrl(<a target=_blank href="http://localhost/cgi-bin/login.cgi?aaa|bbb">http://localhost/cgi-bin/login.cgi?aaa|bbb</a>);
改成
后的执行结果:程序实例2:在Cocos2d-X中使用CCHttpClient实现客服端向服务器发送数据服务器处理客服端的数据并且返回数据
#include <stdio.h> #include <stdlib.h> #include <string.h> void main() { //设置HTML语言 printf("Content-type:text/html\n\n"); //得到上传的数据的长度 char* contentLength = getenv("CONTENT_LENGTH"); //将字符串转换成型 int length = atoi(contentLength); //打印数据的长度 printf("content length = %d<br>\n",length); //动态内存分配 char* buf = (char*)malloc(length); //将buf清零 memset(buf,0,136); font-style:italic">//将stdin(缓冲区)中的数据读取到buf中 fread(buf,length,153)">1,stdin); //打印buf中的数据 printf("%s<br>\n",buf); //释放内存 free(buf); }客服端代码:
//获得网络共享实例 CCHttpClient* httpClient = CCHttpClient::getInstance(); //创建一个请求 CCHttpRequest* request = new CCHttpRequest; //设置请求的类型为POST request->setRequestType(CCHttpRequest::kHttpPost); "http://localhost/cgi-bin/login1.cgi"); //设置回调函数 request->setResponseCallback(this,httpresponse_selector(HttpClient::httpResponse)); //设置向服务器发送的数据 request->setRequestData("aaa|bbb|",153)">8); //连接超时 httpClient->setTimeoutForConnect(30); //发送请求 httpClient->send(request);执行结果: