cocos2dx网络传输之CURL

来源:互联网 发布:淘宝ifashion怎么报名 编辑:程序博客网 时间:2024/05/16 18:16

CURL是一个免费开源的网络传输库支持FTP、HTTP、LDAP等多种传输方式,它存在两套核心接口:单线程传输的阻塞方式和非阻塞方式。

单线程传输的阻塞方式

其使用方式比骄傲简单,其接口也都是前缀为curl_easy_的形式,常见API如下

CURL *curl_easy_init(void); //初始化CURLcode curl_easy_setopt(CURL *curl,CURLoption,...); //设置传输参数CURLcode curl_easy_perform(CURL* curl);//执行当前传输void curl_easy_cleanup(CURL *curl);//清理


在这里我们有必要对CURLcode curl_easy_setopt(CURL *curl,CURLoption)做一个详细的介绍,它通过定义不同的枚举常量传递参数设置。并且它设置的是一个状态值,一次设置后除非修改,否则将保存上次设置的属性。

其中常见属性如下(不足的可以查看API)

CURLOPT_URL                                               //URL地址值CURLOPT_WRITEFUNCTION  //将得到的数据传递给相应的函数里CURLOPT_WRITEDATA                                         //将函数传递给相应的第四个参数里CURLOPT_HEADER                                            //如果设置为1,可以返回HTTP头的值,如果设置为非0值,则可以把一个头包含在输出中CURLOPT_INFILESIZE                                        // 如果你需要上传一个文件到远程站点,这个选项告诉PHP你上传文件的大小CURLOPT_TIMEOUT                                           //设置一个长整数型,作为最大延续多少秒CURLOPT_LOW_SPEED_LIMIT                                   //设置一个长整数型,控制传送多少字节CURLOPT_COOKIE                                            //传递一个包含HTTP Cookie的头文件CURLOPT_CUSTOMREQUEST                                     //当进行HTTP请求时,传递一个字符被GET和HEAD使用CURLOPT_FILE                                              //传送的输出文件CURLOPT_INFILE                                            //传送过来的输出文件CURLOPT_WRITEHEADER                                       //输出的头部分CURLOPT_PROXYUSERPWD                                      //传递一个[user]:[psw]格式的字符串去连接HTTP 代理CURLOPT_POSTFIELDS                                        //传递一个作为HTTP POST操作的所有数据的字符串CURLOPT_REFERER                                           //在HTTP请求中包含一个referer头的字符串CURLOPT_USERAGENT                                         //在HTTP请求中包含一个user-agent头的字符串CURLOPT_FTPPORT                                           //传递一个包含被FTP POST指令使用的IP地址

非阻塞传输

非阻塞传输允许并行地进行多个网络请求,其主要接口如下

CURLM *curl_multi_init(void);CURLMcode *curl_multi_add_handle(CURLM *multi_handle,CURL *curl_handle); //添加一个传输一个请求CURLMcode *curl_multi_perform(CURLM* multi_handle,int *running_handles);CURLMcode *curl_multi_cleanup(CURLM *multi_handle);

非阻塞传输搭建在阻塞传输的基础上,因此也比较简单。

首先,我们利用初始化函数初始化一个CURLM对象

然后初始化若干个CURL对象,并通过

CURLMcode *curl_multi_add_handle(CURLM *multi_handle,CURL *curl_handle)
将其添加到CURLM对象中。
最后我们调用 curl_multi_perform函数即可。





0 0
原创粉丝点击