先包含进extensions目录
CCHttpClient就是要用的类
客户端代码:
先引入头文件和命名空间
#include "cocos2d.h"
#include "cocos-ext.h"
USING_NS_CC;
USING_NS_CC_EXT;
然后直接上点击发送按钮的回调函数请求网络
//点击按钮的回调函数
void TestLayer::btncallback(CCObject* pSender)
{
bool requestType_is_get = false;//采用get方式或者post方式
if (requestType_is_get)
{
CCHttpRequest* request = new CCHttpRequest();//创建请求对象
string str1 = "http://127.0.0.1:8080/b_springmvc_cms/cocos2dx.do";
string str2 = p_User_EditBox->getText();
string str3 = p_Psw_EditBox->getText();
string struser = "?username=";//注意在get方式请求后面加个?问号,再加上请求参数
string strpsw = "&password=";
str1 = str1 + struser + str2 + strpsw + str3;
CCLOG("GetType data : %s", str1.c_str());
request->setUrl(str1.c_str());//设置请求的url,username和password已经包含在url中
request->setRequestType(CCHttpRequest::kHttpGet);//设置为Get模式
request->setResponseCallback(this, httpresponse_selector(TestLayer::onHttpRequestCompleted));//设置响应的回调
request->setTag("getTag");//可以在回调函数中取到这个tag字符串
CCHttpClient::getInstance()->send(request);//发送请求
request->release();//释放请求
}
else
{
CCHttpRequest* request = new CCHttpRequest();//创建请求对象
string str1 = "http://127.0.0.1:8080/b_springmvc_cms/cocos2dx.do";
string str2 = p_User_EditBox->getText();
string str3 = p_Psw_EditBox->getText();
string struser = "username=";
string strpsw = "&password=";
str2 = struser + str2 + strpsw + str3;
request->setUrl(str1.c_str());//设置请求的url,只是请求页面的url,并不包含username和password
request->setRequestType(CCHttpRequest::kHttpPost);//设置为Post模式
request->setResponseCallback(this, httpresponse_selector(TestLayer::onHttpRequestCompleted));//设置响应的回调
const char* postData = str2.c_str();
CCLOG("PostType data : %s", postData);
request->setRequestData(postData, strlen(postData));//设置请求数据,也就是username和password
request->setTag("postTag");//可以在回调函数中取到这个tag字符串
CCHttpClient::getInstance()->send(request);//发送请求
request->release();//释放请求
}
}
接着就是响应的回调函数
void TestLayer::onHttpRequestCompleted(CCHttpClient* client, CCHttpResponse* response)
{
if (!response->isSucceed())//如果响应失败,输出错误信息
{
CCString strError;
strError.initWithFormat("Receive Error! \n%s\n", response->getErrorBuffer());
m_labelStatusCode->setString(strError.getCString());
return;
}
std::vector<char> *buffer = response->getResponseData();//接收响应信息
string recieveData;
for (unsigned int i = 0; i < buffer->size(); i++)
{
recieveData += (*buffer)[i];
}
const char* tag = response->getHttpRequest()->getTag();
CCLOG("Receive data : %s , tag=%s", recieveData.c_str(), tag);
m_labelStatusCode->setString(recieveData.c_str());
}
服务端代码:
服务端用的是tomcat,控制层用springmvc框架搭建的,这里指定了用只接受POST方式的请求
@Controller
public class Cocos2dxAction {
@RequestMapping(value = "/cocos2dx.do",method=RequestMethod.POST)
@ResponseBody
public String cocos2dx(
@RequestParam(value = "username") String username,
@RequestParam(value = "password") String password) {
System.out.println("recive success , username=" + username
+ " , password=" + password);
String string = "server message !";
return string;
}
}
效果:
请求前:
请求后:
eclipse控制台输出的信息: