libcurl主要功能就是用不同的协议连接和沟通不同的服务器。libcurl当前支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议。
今天主要是记录项目中libcurl ftp的使用,关于libcurl的API描述,这个链接已经描述的很详细了:https://curl.haxx.se/libcurl/c/allfuncs.html
以下代码在项目中学习到的,毕竟是小白只能修修补补,二手码农
用例如下:
/*****************************************************************************
函 数 名 : pkt_ftp_send
功能描述 : ftp发送文件
输入参数 : char *user ftp服务器用户名
char *passwd ftp服务器密码
char*dir 发送文件所在目录,注意目录后有"/",如 "/tmp/path/"
char *file 待发送文件名
输出参数 : 无
返 回 值 :
调用函数 :
被调函数 :
修改历史 :
1.日 期 : xxxx
作 者 : xxx
修改内容 : 新生成函数
*****************************************************************************/
INT32 pkt_ftp_send(char *user, char *passwd, char*dir, char *file)
{
CURLcode result;
long ulFileSize;
FILE*fp = NULL;
char acUserPwd[128] = "";
char acFtpForm[256] = "";
struct in_addr stIp;
char acIp[32];
UINT16 usPort;
char fileName[256] = "";
/* 获取服务器IP&PORT */
stIp.s_addr = 0xc0a801f9; /* 缺省服务器IP地址 192.168.1.249 */
if(inet_ntop(AF_INET, (void *)&stIp, acIp, (socklen_t )sizeof(acIp)) == 0) {
return;
}
usPort = 2121;
/* 读取文件 */
snprintf(fileName, sizeof(fileName),"%s%s", dir, file);
fp = fopen(fileName, "r");
if(NULL == fp)
{
return -1;
}
fseek(fp, 0L, SEEK_END);
ulFileSize = ftell(fp);
fseek(fp, 0L, SEEK_SET);
/* 初始化CURL指针 */
CURL* curl = curl_easy_init();
if(NULL == curl)
{
fclose(fp);
return -1;
}
snprintf(acUserPwd, 128, "%s:%s", user, passwd);
snprintf(acFtpForm, 128, "ftp://%s:%u/%s", acIp, usPort, file);
curl_easy_setopt(curl, CURLOPT_USERPWD, acUserPwd);
curl_easy_setopt(curl, CURLOPT_URL, acFtpForm);
curl_easy_setopt(curl, CURLOPT_READDATA, fp);
curl_easy_setopt(curl, CURLOPT_UPLOAD, 1);
curl_easy_setopt(curl, CURLOPT_INFILESIZE, ulFileSize);
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 60);
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10);
result = curl_easy_perform(curl);
if(CURLE_OK!=result)
{
curl_easy_cleanup(curl);
fclose(fp);
return -1;
}
curl_easy_cleanup(curl);
fclose(fp);
return 0;
}