常用libcurl异步使用方法

常用libcurl异步使用方法,第1张

1 背景知识

2 libcurl 基础知识

3 libcurl两种模式

4 libcurl实例分析

1 背景知识:

1.1 基本网络通信cs模式,select 框架,网上例子很多.下面只介绍epoll的难点.其他内容请自行搜索.

1.2 epoll 用法

1.2.1 基础知识:

在自己端准备write之前,通过epoll ctrl设置成epoll out.

epoll in 是被动监听接收,epoll out是主动设置.

1.2.2 epoll 模型:网上例子很多.

这个是最简单异步,先发送--等待--接收,这种用法很少用了

https://blog.csdn.net/lijinqi1987/article/details/53925835 and https://blog.csdn.net/Rong_Toa/article/details/105712677 .

本文讨论curl_multi_socket_action 方罩困案.

**3.1 easy 模式(这种模式比较简单) **

调用curl_easy_setopt函数设置传输的一些基本参数,CULROPT_URL必填.设置完成后,调用curl_easy_perform函数发送数据.

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_WRITEDATA, void *pointer)

curl_easy_setopt(conn->easy, CURLOPT_URL, conn->url)

curl_easy_setopt(conn->easy, CURLOPT_WRITEFUNCTION, write_cb)

curl_easy_setopt(conn->easy, CURLOPT_WRITEDATA, conn)

第一句 curl建立与url 连接,第二句将respond 发送到write_cb,第三句是将write_cb处理内容写入conn指向的文件

3.2 multi 模式

1 ) 常用函数介绍(注意参数)

a ) CURLMOPT_SOCKETFUNCTION:设置socket的回调函数.是所有socket 变化都会调用callback(不仅物携念仅是socket connect,read/write也调用).

对于接收的话,CURLMOPT_SOCKETDATA没用。socketp是返回值。

CURLMOPT_TIMERDATA and CURLOPT_WRITEDATA 都是对应 curl function的入参.

b) CURLMOPT_TIMERFUNCTION :set callback to receive timeout values

You can also use the curl_multi_timeout function to poll the value at any given time,

but for an event-based system using the callback is far better than relying on polling the timeout value.

系统超时 *** 作触发callback.

c ) CURLOPT_WRITEFUNCTION:set callback for writing received data

CURLOPT_WRITEDATA:custom pointer passed to the write callback

设置CURLOPT_WRITEFUNCTION的参数4,把参数1 ptr指向的数隐轮据拷到参数4 userdata

d ) curl_multi_setopt

CURLMOPT_TIMERDATA:The userp pointer is set with CURLMOPT_TIMERDATA. 入参

curl_multi_setopt is used to tell a libcurl multi handle how to behave.

CURLMOPT_SOCKETFUNCTION,CURLMOPT_SOCKETDATA,CURLMOPT_TIMERFUNCTION,CURLMOPT_TIMERDATA

e) curl_multi_assign

set association sockfd with sockptr curl系统中将sockfd和sockpt结构体绑定

执行curl命令.curl_multi_socket_action=curl_multi_perform:reads/writes available data given an action.通知libcurl读写数据

执行curl_multi_add_handle中的东东. 注意参数3ev_bitmask是action.

比如: 设置了CURLMOPT_SOCKETFUNCTION就从server download file.设置CURLMOPT_UPLOAD就是上传file.

CURLOPT_WRITEFUNCTION 就调用CURLOPT_WRITEDATA将download data写入file.

curl同时和socket,epoll,file 同时打交道.

curl精华:curl_multi_socket_action可以自动get file from server(CURLOPT_URL) and 自动write file to local(CURLOPT_WRITEFUNCTION)

4.1 curl+ epoll

CURLOPT_URL=connect,CURLMOPT_SOCKETFUNCTION=epoll_ctrl, curl_multi_socket_action=get remote file and write file to local ,epoll=select.

实现步骤和时序:

https://curl.haxx.se/libcurl/c/ephiperfifo.html

[ https://www.jianshu.com/p/80274bc54aff]

( https://www.jianshu.com/p/80274bc54aff )

https://blog.csdn.net/Rong_Toa/article/details/105712677

https://blog.csdn.net/lijinqi1987/article/details/53996129

https://www.cnblogs.com/zl-graduate/articles/6724446.html

可能是服务期问题.还有就是你的FTP帐号正确不.还有端口是否设置正确.建议你用FlashFXP来上传FlashFXP是做圆一个功能强大的清举FXP/FTP软件,融合了一些其他优秀FTP软件的优点纯正塌,如像CuteFTP一样可以比较文件夹,支持彩色文字显示;像BpFTP支持多文件夹选择文件,能够缓存文件夹;像LeapFTP一样的外观界面,甚至设计思路也差相仿佛。支持文件夹(带子文件夹)的文件传送、删除;支持上传、下载及第三方文件续传;可以跳过指定的文件类型,只传送需要的文件;可以自定义不同文件类型的显示颜色;可以缓存远端文件夹列表,支持FTP代理及Socks3&4;具有避免空闲功能,防止被站点踢出;可以显示或隐藏“隐藏”属性的文件、文件夹;支持每个站点使用被动模式等。下载地址:2506.htm


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/12224001.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-22
下一篇 2023-05-22

发表评论

登录后才能评论

评论列表(0条)

保存