cocos2dx网络传输之CURL

本文深入探讨了CURL网络传输库的使用方法,包括单线程阻塞和非阻塞两种传输方式。详细介绍了各关键API的功能和参数设置,如CURLOPT_URL、CURLOPT_WRITEFUNCTION等,并通过示例展示了非阻塞传输的实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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函数即可。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值