cocos2dx 3.3rc0 踩坑日记(一)------ 弱联网 Curl
这两天看了视频学习了下弱联网技术,用的是Curl,具体使用方法我就多说了,可以参考官方样例和下面的文章,解释的很清楚。
【Curl (libcurl) 开发 之一】Cocos2dx之libcurl(curl_easy)的编程教程(帮助手册)!
我要说的我又踩到一个坑。。。为什么是又呢。。。天生就是来踩坑的。。。
先说下使用之前需要加入curl.h的路径$(EngineRoot)external\curl\include\win32和链接库libcurl_imp.lib
如图所示:
下面来说下我踩到坑,有两个!!!!
第一个是我修改样例curl_easy_setopt(curl, CURLOPT_URL, "www.baidu.com"); 居然请求失败!失败!。。。。我就蛋疼了。。。和视频里的一样为什么失败呢。。。
后来改成curl_easy_setopt(curl, CURLOPT_URL, "baidu.com");就可以请求成功了。。。不要问为什么,我也不知道。。。我去看了cocos2dx以前版本是这样写的。。。可能还有朋友看见看见类似的代码curl_easy_setopt(curl, CURLOPT_URL, "http//:baidu.com");两种写法都可以,http//:可有可无!
第二个坑就是回调函数!!!!!!!
回调函数如下:
size_t HelloWorld::write_data(void *buffer, size_t size, size_t nmemb, void *userp) { log("%s", (char*)buffer); return size; }
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, HelloWorld::write_data);设置好回调函数就会在执行curl_easy_perform(curl)自动调用了。
又是和视频里一样。。。还是请求失败,返回了一个数23!!!去查了资料看看表示什么意思。
CURLE_WRITE_ERROR (23) – 在向本地文件写入所收到的数据时发生错误,或由写入回调 (write callback) 向 libcurl 返回了一个错误。
原来必须要回调函数返回它所得到数据的大小。如果返回的数据大小与传递给它数据大小不一致,libcurl将会终止操作,并返回一个错误代码。
size_t HelloWorld::write_data(void *buffer, size_t size, size_t nmemb, void *userp) { log("%s", (char*)buffer); return size * nmemb; //这里一定要返回实际返回的字节数 }
代码改成size * nmemb就可以了,nmemb表示模块的大小,一个表示模块数!!!
视频坑啊。。。纠结死我了,还好最终解决了!
Cocos2dx对Curl进行封装,提供了CCHttpClient类,推荐大家都使用CCHttpClient类,CCHttpClient是异步的。而Curl写异步还需要自己写。。。我们还是不要重复造轮子了!
就写这么多,期待下篇文章!
如有不足之处,请大家指出,一起交流成长!
本文出自 “小狼Zer” 博客,请务必保留此出处http://9151482.blog.51cto.com/9141482/1586066
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。