(原创) cocos2dx使用Curl连接网络(客户端)
0. 环境:
winxpsp3, vs2010, cocos2dx@2.1.4
1. 新建一个Helloworld工程
2. HelloworldScene.h里面重写virtual bool ccTouchBegan( cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent );
3. .cpp看代码:
关注点在write_callback() 和 ccTouchBegan()的重写
4. c盘创建个空文件C:\\baidu.html
5. 实现的功能就是点一下屏幕发出一次http get request, 然后在指定的文件里面填充上服务器返回的网页.
#include "HelloWorldScene.h"
#include "cocos-ext.h"
#include "curl\curl.h"
#include <string> using namespace std; USING_NS_CC;
USING_NS_CC_EXT; ////////////////////////////////////
CCScene* HelloWorld::scene()
{
// 'scene' is an autorelease object
CCScene *scene = CCScene::create(); // 'layer' is an autorelease object
HelloWorld *layer = HelloWorld::create(); // add layer as a child to scene
scene->addChild(layer); // return the scene
return scene;
} // on "init" you need to initialize your instance
bool HelloWorld::init()
{
if ( !CCLayer::init() )
{
return false;
} pLabel = CCLabelTTF::create("Hello World", "airal", );
CCSize size = CCDirector::sharedDirector()->getWinSize();
pLabel->setPosition( ccp(size.width / , size.height - ) );
this->addChild(pLabel, ); setTouchMode(kCCTouchesOneByOne);
setTouchEnabled(true);
return true;
} void HelloWorld::menuCloseCallback(CCObject* pSender)
{
CCDirector::sharedDirector()->end(); #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
exit();
#endif
} size_t write_callback(void *ptr, size_t size, size_t nmemb, FILE *stream)
{
size_t written = fwrite(ptr, size, nmemb, (FILE *)stream);
return written;
} bool HelloWorld::ccTouchBegan( CCTouch *pTouch, CCEvent *pEvent )
{
CCLog("go into ccTouchBegan");
CURL *curl;
CURLcode res;
char buffer[]; curl = curl_easy_init();
if (curl)
{
FILE *outfile;
outfile = fopen("C:\\baidu.html", "wb"); //curl_easy_setopt(curl, CURLOPT_URL, "blog.csdn.net");
curl_easy_setopt(curl, CURLOPT_URL, "http://127.0.0.1:8080/wuziqi?name=1715"); if(outfile)
{
//指定写入的文件指针。
curl_easy_setopt(curl, CURLOPT_FILE, outfile);
} //设置写数据的回调函数。
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback); res = curl_easy_perform(curl);
/* always cleanup */
curl_easy_cleanup(curl); fclose(outfile); if (res == )
{
pLabel->setString("0 response");
}
else
{
sprintf(buffer,"code: %i",res);
pLabel->setString(buffer);
}
}
else
{
pLabel->setString("no curl");
} /////////////////////////////////////////////////////////// return true;
} /*size_t HelloWorld::funcCallback( void* ptr,size_t size,size_t number,void *stream )
{
CCString* a = CCString::createWithFormat("%s",ptr);
this->pLabel->setString(a->getCString());
CCLog(a->getCString());
CCLog("go into writehtml");
return size*number;//这里一定要返回实际返回的字节数
}*/
(原创) cocos2dx使用Curl连接网络(客户端)的更多相关文章
- httpUrlConnection连接网络的用法(用到了handle传递消息,在主线程中更新UI)
由于httpclient在Android5.0以后已经过时,所以官方推荐使用httpUrlConnection来连接网络,现将该连接的基本方法展示,如下 注意:记得加入<uses-permiss ...
- VMware中解决ubuntu不能连接网络问题。(亲测有效)
1.保证自己的电脑能正常连接网络 2.打开关于VMware的所有服务(一般情况服务设置的是手动启动,需要自己打开)如图: 3.对VMware虚拟机进行网络设置:右击ubuntn选择设置 4.选择网络适 ...
- 在Android开发中如何判读当前设备是否连接网络
1:前言: 我们在Android开发的过程中,很多实现是要向远程服务器拿数据的,但是未必当前设备一定连接了网络啊,那么此时我们就是要进行判断的了, 如果是有网络的话,那么此时就去向远程服务器去拿数据, ...
- Js navigator.onLine 获取设备是否可以上网、连接网络
http://zccst.iteye.com/blog/2194229 获取用户的联网状态 if (navigator && navigator.onLine === false) { ...
- 怎样用C#代码知道是否已连接网络
有时,上传数据和下载数据都需要用到网络,但是不知道程序是否已连接到网络,下面是简单测试是否已连接网络的小功能 1.在winform窗体上添加一个按钮和多选框
- IOS(SystemConfiguration)框架中关于测试连接网络状态相关方法
1. 在SystemConfiguration.famework中提供和联网相关的function, 可用来检查网络连接状态. 2. SC(SystemConfiguration)框架中关于测试连接网 ...
- 如何让centos6.5在vm11里上网,连接网络?
如何让centos在vm里连接网络?步骤有3,方可解决: 1.配置vm的虚拟网络编辑器 2.配置虚拟机centos 3.设置centos的ip地址 一.配置vm的虚拟网络编辑器
- Xcode7连接网络设置
XCode7连接互联网的时候需要再info.plist设置(之前版本都不需要)连接网络NSAppTransportSecurity 字典NSAllowsArbitraryLoads 布尔 Y ...
- android.os.NetworkOnMainThreadException 在4.0之后谷歌强制要求连接网络不能在主线程进行访问
谷歌在4.0系统以后就禁止在主线程中进行网络访问了,原因是: 主线程是负责UI的响应,如果在主线程进行网络访问,超过5秒的话就会引发强制关闭, 所以这种耗时的操作不能放在主线程里.放在子线程里,而子线 ...
随机推荐
- 数据库分页和使用jstl标签替换分页的jsp代码
参考链接: http://www.mossle.com/docs/jsp/html/jsp-ch-15.html
- 过河问题nyoj47
时间限制:1000 ms | 内存限制:65535 KB 难度:5 描述 在漆黑的夜里,N位旅行者来到了一座狭窄而且没有护栏的桥边.如果不借助手电筒的话,大家是无论如何也不敢过桥去的.不幸的是 ...
- 20145337实验四Android开发基础
20145337实验四Android开发基础 实验内容 基于Android Studio开发简单的Android应用并部署测试; 了解Android组件.布局管理器的使用: 掌握Android中事件处 ...
- 解决安装sql server 需要重启问题
解决办法: 一.在SQL服务器的安装盘中找到MSDE这个目录,并且点击setup.exe安装它. 二.安装完毕后,重启系统WINDOWSXP,这下就可以看到SQL服务的图标出现了. 三.再直接安装根目 ...
- 百度Site App的uaredirect.js实现手机访问,自动跳转网站手机版
以下为代码,可放置在网站foot底部文件,或者haead顶部文件,建议将代码放在网站顶部,这样可以实现手机访问立即跳转! <script src="http://siteapp.bai ...
- Windows内核 基本数据结构
驱动对象: 每个驱动程序都会有唯一的驱动对象与之对应,并且这个驱动对象是在驱动加载时被内核中的对象管理程序所创建的.驱动对象用DRIVER_OBJECT数据结构表示,它作为驱动的一个实例被内核加载,并 ...
- rabbitmq redis
RabbitMQ RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统. 对于RabbitMQ来说,生产和消费不再针对内存里的一个Queue对象,而是某台服务器上的RabbitMQ Se ...
- Linux解决Device eth0 does not seem to be present
ifconfig...没有看到eth0..然后重启网卡又报下面错误. 故障现象: service network restartShutting down loopback insterface: ...
- Struts(八):动态方法调用
动态方法调用:通过url动态调用action中的方法. 默认情况下,Struts的动态方法调用处于禁用状态. 测试定义一个action类: package com.dx.actions; public ...
- Java集合容器简介
Java集合容器主要有以下几类: 1,内置容器:数组 2,list容器:Vetor,Stack,ArrayList,LinkedList, CopyOnWriteArrayList(1.5),Attr ...