SFTP客户端代码示例

这篇博客展示了如何在Windows环境下,利用libssh2-1.4.3、zlib-1.2.8和openssl-1.0.1g来构建SFTP客户端。作者Kagula详细介绍了从下载源码到编译libssh2项目的步骤,并提到了在Visual Studio 2013中可能遇到的库依赖问题及其解决方法。最终,提供了SFTP客户端的示例代码SFTP_Libssh2.cpp。
摘要由CSDN通过智能技术生成

SFTP客户端代码示例

环境:libssh2 1.4.3、zlib-1.2.8、openssl-1.0.1g

Author: Kagula

最后更新日期:2014-5-18

         从http://www.libssh2.org/下载libssh2-1.4.3.tar.gz文件,解压后打开libssh2.dsw文件升级项目到VisualStudio 2013,里面有两个项目,只要编译libssh2项目就可以了。编译前需要添加zlib和openssl的头文件和库文件链接位置,如果编译libssh2提示找不到msvcrt.lib,为链接库添加下面的路径

C:\Program Files (x86)\Microsoft VisualStudio 12.0\VC\lib

提示找不到ws2_32.lib或odbc32.lib,添加下面的链接路径

C:\Program Files (x86)\MicrosoftSDKs\Windows\v7.1A\Lib

编译通过后文件输出到\libssh2-1.4.3\win32\Release_lib路径下

下面是SFTP客户端示例代码

#include "SFTP_Libssh2.h"
#include <iostream>

int main(int argc, char* argv[])
{
	//下面的代码只要在进程初始化的时候执行
	kagula::network::SFTP_Init();

	//测试SFTP链接
	kagula::network::SFTP_Libssh2* client = kagula::network::SFTP_Libssh2::Inst();
	std::string ip = "192.168.19.130";
	uint16_t port = 22;
	std::string usr = "kagula";
	std::string pwd = "123456";
	if (false == client->IsAbilityConn(ip, port, usr, pwd))
	{
		std::cout << client->strLastError << std::endl;
		return -1;
	}

	//测试文件上传,d:\\temp\\a.html
	if (0 != client->upload(ip, 22, usr, pwd, "d:\\temp\\a.html", "/home/kagula/a.html"))
	{
		std::cout << "Error:" << client->strLastError << std::endl;
	} else
	{
		std::cout << client->strLastError << std::endl;
	}
	

	//测试文件下载
	if (0 != client->download(ip, 22, usr, pwd, "/home/kagula/a.html","d:\\temp\\b.html" ))
	{
		std::cout << "Error:" << client->strLastError << std::endl;
	}
	else
	{
		std::cout << client->strLastError << std::endl;
	}

	//进程准备结束,释放资源的时候,运行下面的代码
	kagula::network::SFTP_Exit();
	return 0;
}

SFTP_Libssh2.h

#pragma once

#include <string>
#include <atomic>

/*
功能:SFTP协议的文件传输功能
最后更新日期:2014-5-17
简介:借助Libssh2库很容易实现sftp,ssh2客户端,这里给出
      如何实现Sftp客户端的代码
测试环境:Windows 8.1 64bit、Visual Studio 2013 Professional SP1
       OpenSSL 1.0.1g、zlib-1.2.8、libssh2  1.4.3
       Win32控制台项目
注意:动态链接需要把“libssh2.dll”文件复制到当前项目路径下
说明:原来的代码支持多线程,从应用程序抽出来的时候简化了,
	 你可以修改代码使它同时支持上传或下载多个文件。
建议:[1]第三方库直接下载源代码自己编译免得库由于编译器版本的
     不同或设置的不同链接的时候一大堆麻烦。
	 [2]读懂代码根据项目需求作相应修改
补充阅读资料:
《使用libssh2库实现支持密码参数的ssh2客户端》
http://blog.chinaunix.net/uid-24382173-id-229823.html
*/
namespace kagula {
	namespace network {
		int SFTP_Init();
		void SFTP_Exit();

		class SFTP_BKCall
		{
		public:
			/* progress返回值范围[0.0,1.0] */
			virtual void OnProgress(float progress) = 0;
		};

		class SFTP_Libssh2
		{
		public:
			static SFTP_Libssh2* Inst()
			{
				static SFTP_Libssh2 inst;

				return &inst;
			}

			/*
			入口参数使用说明
			ip:	  就填一个IP地址就好了,例如“127.0.0.1”。
			port: 端口,SFTP服务器默认端口为22。
			username:
			password:
			sftppath: 远程路径“/”开头 ,例如“/a.jpg”
			localpath: 本地路径,例如“d:\\temp\\test.jpg”
			strLastError: 错误信息

			出口参数
			返回不等于零,代表失败!
			*/
			int upload(std::string ip, unsigned short port, std::string username,
				std::string password, std::string localpath, std::string remotepath);
			int download(std::string ip, unsigned short port, std::string username,
				std::string password, std::string sftppath, std::string localpath);

			//测试SFTP服务器是否可以链接
			bool IsAbilityConn(std::string ip, unsigned short port, std::string username,
				std::string password);

			//设置回掉函数
			void SetBKCall(SFTP_
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kagula086

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值