# C++FTP客户端库:ftplibpp的使用

C++FTP客户端库:ftplibpp的使用

一、简述

ftplibpp是一个跨平台的可以提供ftp客户端功能的C++库。它包含可以实现ftp客户端功能的类,支持所有基本的ftp功能以及一些高级功能:如恢复、fxp、ssl/tls加密、支持大文件或符合当今标准的日志记录等。本文讲述其在windows平台上的使用。

二、使用

首先在github上(链接:https://github.com/mkulke/ftplibpp)下载ftplibpp源码

安装OpenSSL后,在其安装路径下会出现OpenSSL的头文件和库。在vs工程中的项目属性页,“附加包含目录”将OpenSSL的头文件目录添加进去,“链接库目录”和“附加依赖项”将OpenSSL的lib添加进去。

“配置属性” -> "C/C++" -> "预处理器" 中增加NOLFS、_CRT_SECURE_NO_WARNINGS、_WINSOCK_DEPRECATED_NO_WARNINGS。

修改 ftplib.h

在ftplib.h中有如下代码:

#ifndef _WIN32
#include <unistd.h>
#include <sys/time.h>
#endif

将其修改为:

#ifndef _WIN32
#include <unistd.h>
#include <sys/time.h>
#else
#include <WinSock2.h>
#include <ws2tcpip.h>
#endif


在ftplib.cpp中有如下代码:

#ifndef NOSSL
	if (nControl->tlsdata)
	{
		(*nData)->ssl = SSL_new(nControl->ctx);
		(*nData)->sbio = BIO_new_socket((*nData)->handle, BIO_NOCLOSE);
		SSL_set_bio((*nData)->ssl,(*nData)->sbio,(*nData)->sbio);
		ret = SSL_connect((*nData)->ssl);
		if (ret != 1) return 0;
		(*nData)->tlsdata = 1;
	}
#endif

将其修改为:

#ifndef NOSSL
	if (nControl->tlsdata)
	{
		(*nData)->ssl = SSL_new(nControl->ctx);
		(*nData)->sbio = BIO_new_socket((*nData)->handle, BIO_NOCLOSE);
		SSL_set_bio((*nData)->ssl,(*nData)->sbio,(*nData)->sbio);
		int ret = SSL_connect((*nData)->ssl);
		if (ret != 1) return 0;
		(*nData)->tlsdata = 1;
	}
#endif

有如下代码:

#if defined(_WIN32)
#include <windows.h>
#include <winsock.h>
#else
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <arpa/inet.h>
#endif

修改

#if defined(_WIN32)
#include <windows.h>
#include <winsock.h>
#pragma comment(lib,"ws2_32")
#else
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <arpa/inet.h>
#endif

main

#include <stdio.h>
#include "ftplib.h"
 
int main()
{
	ftplib *ftp = new ftplib();
	int ret = ftp->Connect("127.0.0.1:21");
	ret = ftp->Login("xiaoming", "123456");
	ret = ftp->Get("text.txt", "text.txt", ftplib::image);
	ftp->Quit();
	return 0;
}