本站文章均为 李华明Himi 原创,转载务必在明显处注明:
转载自【黑米GameDev街区】 原文链接: http://www.himigame.com/iphone-cocos2dx/870.html
☞ 点击订阅 ☜ 本博客最新动态!及时将最新博文通知您!
之前已经分享过一篇基于Cocos2dx与服务器使用Socket进行通信的框架,还不太熟悉的请移步到如下博文中:
【C/S通信交互之Socket篇】Cocos2dx(Client)使用BSD Socket与Mina(Server)手机网游通信框架!
那么今天Himi来分享如何在cocos2dx中使用Http来访问Server端并且获取数据;
这里对于Server端,Himi选用,Jetty,对于Jetty不太熟悉的可以先自行baidu~google~是个servlet的容器。类似JSP。 什么是servlet?jsp? = =。不赘述了。大家手动好吧;
下面我们简单书写一个Server端(如何创建一个Jetty服务器请看Himi Jetty 开发系列文章)
———–首先服务器端————–
这里就ibu写创建项目和配置项目的jar包 build path了。直接上主要代码段:
首先是Jetty Server主类:(这里Himi用的IDE 是 Eclipse)
- ServletServer.java
- import org.eclipse.jetty.server.Server;
- import org.eclipse.jetty.servlet.ServletContextHandler;
- import org.eclipse.jetty.servlet.ServletHolder;
- import servlet.HServlet;
- /**
- * @author Himi
- */
- public class ServletServer {
- public static void main(String[] args) throws Exception {
- Server server = new Server(8080);
- ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
- context.setContextPath("/");
- server.setHandler(context);
- context.addServlet(new ServletHolder(new HServlet()), "/himi");
- server.start();
- server.join();
- }
- }
然后是我们的一个Servlet类:
- HServlet.java
- package servlet;
- import java.io.IOException;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- /**
- * @author Himi
- */
- public class HServlet extends HttpServlet {
- private static final long serialVersionUID = 1L;
- public HServlet() {
- }
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- System.out.println("~~~~有一个Clinet访问!~~~~");
- //获取http Client端对应的两个字段的数据
- String name = request.getParameter("name");
- String password = request.getParameter("password");
- //设置字符编码
- response.setCharacterEncoding("UTF-8");
- response.setContentType("text/html");
- response.setStatus(HttpServletResponse.SC_OK);
- response.getWriter().println("Server say: 测试中文:session=" + request.getSession(true).getId());
- if(name!=null) {
- response.getWriter().println("Server say:名字:"+name);
- System.out.println("Client say: name="+name);
- }
- if(password!=null) {
- response.getWriter().println("Server say:密码:"+password);
- System.out.println("Client say: password="+password);
- }
- }
- }
我们的Servlet里,就是得到http clinet端传过来的数据返回回去。中间简单写给客户端一些简单字符串~
OK,启动我们的Jetty服务器,右键ServletServer.java run,观察控制台:
- 2012-05-25 16:43:04.767:INFO:oejs.Server:jetty-8.1.3.v20120416
- 2012-05-25 16:43:05.110:INFO:oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:8080
出现如上,表示你的Jetty Server启动成功;OK。然后设计客户端代码;
———–然后cocos2dx Clinet端————–
首先新建一个cocos2dx项目,这个不多说。然后在默认的HelloWorldScene.cpp 初始化函数替换如下代码:
- bool HelloWorld::init()
- {
- /*
- *@author By Himi
- */
- //////////////////////////////
- // 1. super init first
- if ( !CCLayer::init() )
- {
- return false;
- }
- CCLabelTTF* pLabel = CCLabelTTF::labelWithString("Hello World", "Thonburi", 34);
- CCSize size = CCDirector::sharedDirector()->getWinSize();
- pLabel->setPosition( ccp(size.width / 2, size.height - 20) );
- this->addChild(pLabel, 1);
- CURL *curl;
- CURLcode res;
- char buffer[10];
- curl = curl_easy_init();
- if (curl)
- {
- // curl_easy_setopt(curl, CURLOPT_URL, "http://127.0.0.1:8080/himi");
- curl_easy_setopt(curl, CURLOPT_URL, "http://127.0.0.1:8080/himi?name=xiaoming&password=李华明");
- res = curl_easy_perform(curl);
- /* always cleanup */
- curl_easy_cleanup(curl);
- if (res == 0)
- {
- pLabel->setString("0 response");
- }
- else
- {
- sprintf(buffer,"code: %i",res);
- pLabel->setString(buffer);
- }
- }
- else
- {
- pLabel->setString("no curl");
- }
- return true;
- }
OK,然后我们导入 curl.h头文件:
1
|
#include "curl/curl.h" |
还没完,这时候提示我们找不到这个头文件,OK,继续操作两步如下:
1. 加入 libcurl.a 文件:(此文件默认在cocos2dx引擎包下的cocos2dx/platform/third_party/ios/libraries文件夹下)
别着急这时候还会提示头文件找不到;
在xcode中点击你的cocos2dx项目,然后选择你项目的 targets,然后在Build Settings中找到 Search Paths:
双击你的 Library Search Paths 观察:如下图:
下面那个”$…../third_party/ios/libraries”路径是你第一步添加lib curl.a的时候默认添加的。这个我们不要修改;但是请双击这个路径然后copy下来;
我们需要修改的是此属性的上一个属性,Header Search Paths;
双击Header Search Paths属性后面的连接,然后点击“+”号添加一个路径,这个路径就是刚才你copy的路径,但是粘贴后还要将此路径设置到上一个文件夹的路径;这么说有点绕,其实就是如下:
假设你之前copy的路径是 ”$…../third_party/ios/libraries”
那么你在这里粘贴的时候路径应该是: ”$…../third_party/ios”
OK,Himi这里的路径也截图给大家一张便于对比:
OK,如果以上步骤都操作正常那么编译将没有任何问题;
编译成功后,command+R运行项目,观察xcode控制台打印,以及服务器端打印:正常情况下应该如下:
OK,一切正常;
注意:用脚本新建的工程,默认是不加libcurl的,大家编译到其他平台的时候要修改makefile文件将其添加进去;(具体可以参考tests里面的makefile )
提醒 :这里客户端与服务器只是简单的http交互,没有更细节的处理,例如 Client端访问应该另起一个线程,交互的时候数据要有一定的协议规范等等这些在介绍Socket的时候都有说过了,这里就不多说了;
相关推荐
Cocos2dx2.2游戏源码:奇怪大冒险,(原作熊同学) 质量很好,骨头使用vs2013和cocos2dx2.2打开即可编译运行,感谢原作者熊同学,文档参考http://blog.csdn.net/iamlazybone 相关笔记
cocos2dx 2.x 开发示例游戏合集 效果展示: https://github.com/pdpdds/cocos2dx-dev/blob/master/img/snap0215.jpg https://github.com/pdpdds/cocos2dx-dev/blob/master/img/snap0216.jpg ...
使用COCOS2DX实现线程后台运作与推送,当点击HOME键后进入后台运作方式,开启后台线程,使用VOIP;
您的应用静态链接到的 OpenSSL 版本有多个安全漏洞。建议您尽快更新 OpenSSL。...下载资源后 替换工程文件对应下面的 cocos2dx/platform/third_party/android/prebuilt/libcurl/libs 所以.a文件。 然后进行编辑即可。
cocos2dx 模糊效果代码提供,尽情下载吧!
手游开发引擎 Cocos2DX.手机游戏开发
cocos2dx中使用精灵的例子,新手可参考。
cocos2dx使用第三方so库 是一分文档, cocos2dx使用第三方so库 是一分文档, cocos2dx使用第三方so库 是一分文档, 重要事情说三遍
cocos2dx scrollview优化
基于cocos2dx3.2的ScrollView改良版,paging分页部分是参考网上已有的源代码并进行改良,修复bug, indicator指示器部分是自己研发。 测试环境:mac os x (Windows平台 应该可行,需要你自己添加PagedScrollView到...
cocos2dx-3.x游戏开发之旅电子版供大家下载参考。。。。。。
COCOS2D-X之CurL下载图片Demo
IOS开发中因为引入cocos2dx,导致代码审核不通过无法提交( Apple will stop accepting submissions of apps that use UIWebView APIs )。该问题的解决方案有两种:1)升级Cocos2dx的版本,在查看Cocoas官网及Cocoas...
cocos2dx libevent 使用,有需要的童鞋下载使用一下吧!
演示了cocos2dx与Firefly服务端最简单的网络消息收发,用于引导超级新手使用Firefly搭建网络应用和网络游戏平台,新手学习使用。
想了解cocos2dx的游戏开发的朋友可以看一下,进行一些入门知识的补充。
此代码在cocos2dx2.1.4下面编译有部分错误,我修改后,正常。 下下来后,请在VC++包含目录中链接(F:\cocos2d-x-2.1.4\cocos2dx\platform\win32;F:\cocos2d-x-2.1.4\cocos2dx\platform\third_party\win32\OGLES\GL\;...
bullet+cocos2dx实现3D台球之前期准备,准备资源,准备测试代码。
cocos2dx之微信打飞机 ,,,,博客地址:http://blog.csdn.net/kuloveyouwei
cocos2dx_lua使用c++cocos2dx_lua使用c++