当前位置: 首页 > news >正文

(原创) 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", 34);  
    CCSize size = CCDirector::sharedDirector()->getWinSize();  
    pLabel->setPosition( ccp(size.width / 2, size.height - 20) );  
    this->addChild(pLabel, 1);  
   
   
    setTouchMode(kCCTouchesOneByOne);
    setTouchEnabled(true);
    return true;  
} 


void HelloWorld::menuCloseCallback(CCObject* pSender)
{
    CCDirector::sharedDirector()->end();

#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
    exit(0);
#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[10];

    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 == 0)
        {
            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;//这里一定要返回实际返回的字节数    
}*/

 

转载于:https://www.cnblogs.com/zhaitao85/p/3625904.html

相关文章:

  • 创造安宁舒适工作日的17个办法
  • 玩转Web之easyui(三)-----easy ui dataGird 重新指定url以获取不同数据源信息
  • Pycharm使用问题# Interpreter设置
  • C#找不到ConfigurationManager类
  • php get post 发送与接收
  • ubuntu卸载qq2012
  • linux 下 eclipse 开发环境的搭建
  • 读书的理由
  • 在 root 下执行 Oracle 程序时找不到 libclntsh.so.11.1 错误的解决办法。
  • 开源数据库连接池proxool
  • win7桌面不能自动刷新
  • thinkphp 路由不支持.(点)的问题
  • nyoj 306 二分+dfs
  • C#的变迁史 - C# 5.0 之并行编程总结篇
  • [翻译] TLMotionEffect 重力感应
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • Angular 响应式表单之下拉框
  • AngularJS指令开发(1)——参数详解
  • es6--symbol
  • Intervention/image 图片处理扩展包的安装和使用
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • JavaScript标准库系列——Math对象和Date对象(二)
  • linux安装openssl、swoole等扩展的具体步骤
  • spring学习第二天
  • Vue官网教程学习过程中值得记录的一些事情
  • 订阅Forge Viewer所有的事件
  • 给第三方使用接口的 URL 签名实现
  • 前端设计模式
  • 日剧·日综资源集合(建议收藏)
  • 通过几道题目学习二叉搜索树
  • 用element的upload组件实现多图片上传和压缩
  • ​如何防止网络攻击?
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #14vue3生成表单并跳转到外部地址的方式
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • (13):Silverlight 2 数据与通信之WebRequest
  • (175)FPGA门控时钟技术
  • (2)STL算法之元素计数
  • (33)STM32——485实验笔记
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (WSI分类)WSI分类文献小综述 2024
  • (笔试题)分解质因式
  • (转)nsfocus-绿盟科技笔试题目
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • .Net中wcf服务生成及调用
  • .secret勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复
  • ?
  • @Autowired和@Resource装配
  • @在php中起什么作用?
  • [AI]文心一言爆火的同时,ChatGPT带来了这么多的开源项目你了解吗
  • [C# 基础知识系列]专题十六:Linq介绍
  • [C/C++] -- 二叉树
  • [C/C++]数据结构 堆的详解