基于VS的FTP文件传输设计与实现

2020-12-29 11:57宋毅
电脑知识与技术 2020年32期

宋毅

摘要:海量数据时代,文件传输需要解决准确率与传输速度问题,通常的网络下载速度有些不能满足用户需求,为适应用户海量下载需求,为此开发FTP文件传输系统,该系统基于Visual Studio环境开发,功能具有访问ftp、文件上传、文件下载、删除、显示目录等功能,给用户提供方便快捷的文件传输下载。

关键词:海量数据;FTP;文件传输

中图分类号:TP311        文献标识码:A

文章编号:1009-3044(2020)32-0232-03

Abstract:In the era of massive data, file transmission needs to solve the problems of accuracy and transmission speed. The usual network download speed can not meet the needs of users. In order to meet the needs of users for massive downloading, FTP file transmission system is developed. The system is developed based on Visual Studio environment, with the functions of accessing FTP, uploading files, downloading files, deleting, displaying directories and other functions, so as to provide users with the services Fast file transfer and download.

Key words: massive data; FTP; file transfer

1 创建项目

使用网络编程方式实现一个典型的FTP系统实现文件传输等功能。

打开Visual Studio,创建一个基于对话框的MFC应用程序,项目名称为“hailianFTP”,创建向导高级功能中注意选择windows套接字,然后完成即可。

2 设计界面

设计hailianFTP的主对话框。添加一个ListBox控件显示FTP的文件和目录内容,并为其关联CListBox类型的成员变量m_lbkuang;添加一个EditBox控件输入FTP服务器地址,并为其关联CString类型的成员变量m_sfuwuqi;添加一个EditBox控件输入FTP登录用户名,并为其关联CString类型的成员变量m_syonghu;添加一个EditBox控件输入FTP登录口令,并为其关联CString类型的成员变量m_smima;添加一个EditBox控件输入FTP目录,并为其关联CString类型的成员变量m_smulu;添加四个静态文本,分别显示服务器地址、用户名、密码、目录,然后添加五个按钮分别表示“打开ftp”“显示ftp内容”“上传数据”“下载数据”和“删除垃圾”。

3 头文件设计

打开hailianFTPDlg.h,添加头文件包含#include ,添加Daoruwenjian函数声明和添加成员,代码如下:

void Daoruwenjian(); CFtpConnection *m_wenjianlianjie; CInternetSession m_isSession;

4 实现文件设计

为五个按钮设计消息响应函数,实现Daoruwenjian函数,实现文件部分代码如下:

BOOL ChailianFTPDlg::OnInitDialog()

{ ……//其它初始化

//初始化成员变量

m_sfuwuqi=_T("127.0.0.1");

m_smulu=_T("");

m_syonghu=_T("anonymous");

m_smima=_T("abcd");

m_wenjianlianjie=NULL;

UpdateData(FALSE);

return TRUE;  }

void ChailianFTPDlg::OnBconnect()//打开ftp按钮功能

{ UpdateData(TRUE);

if(!m_wenjianlianjie)

{ if(m_sfuwuqi!= _T(""))

{ m_wenjianlianjie=m_isSession.GetFtpConnection(m_sfuwuqi,

m_syonghu,m_smima);

if(m_wenjianlianjie)

{ m_wenjianlianjie->GetCurrentDirectory(m_smulu);

m_lianjieanniu.SetWindowText(_T("&不再顯示内容"));

Daoruwenjian();

UpdateData(FALSE); } } }

else { m_wenjianlianjie->Close();

delete m_wenjianlianjie;

m_wenjianlianjie=NULL;

m_lianjieanniu.SetWindowText(_T("&Connect FTP Server"));

m_smulu=_T("");

m_lbkuang.ResetContent();

UpdateData(FALSE); }}

void ChailianFTPDlg::OnBgetfile()//下载数据按钮功能

{ UpdateData(TRUE);

if(xwenjian!="")

{ if(xwenjian.Right(5)== _T("

"))

MessageBox(_T("Unable to download directory"));

else { CFileDialog wenjian(FALSE,NULL,(LPCTSTR)xwenjian);

if(wenjian.DoModal()==IDOK)

{ if(!m_wenjianlianjie->GetFile((LPCTSTR)xwenjian,

(LPCTSTR)wenjian.GetFileName()));

MessageBox(_T("提示错误报警")); } } }}

void ChailianFTPDlg::Shezhimulu()//显示ftp内容按钮功能

{ UpdateData(TRUE);

if(m_smulu!="")

{ m_wenjianlianjie->SetCurrentDirectory((LPCTSTR)m_smulu);//设置显示目录信息

m_wenjianlianjie->GetCurrentDirectory(m_smulu);

Daoruwenjian();

UpdateData(FALSE); }}

void ChailianFTPDlg::OnDblclkLfiles()//双击FTP列表,下载文件或进入另一层目录

{ UpdateData(TRUE);

if(xwenjian!="")

{ if(xwenjian.Right(5)== _T("

"))

{ CString linshi;

m_wenjianlianjie->GetCurrentDirectory(m_smulu);

if(m_smulu.Right(1)!= _T("/"))

m_smulu+=CString(_T("/"));//添加字符串連接信息

linshi=xwenjian.Left(xwenjian.GetLength()-5);

linshi.TrimRight();

m_smulu+=linshi;

UpdateData(FALSE);

Shezhimulu(); }

else {CFileDialog wenjian(FALSE,NULL,(LPCTSTR)xwenjian);

if(wenjian.DoModal()==IDOK)

{if(!m_wenjianlianjie->GetFile((LPCTSTR)xwenjian,

(LPCTSTR)wenjian.GetFileName()))

MessageBox(_T("关于文件错误提示")); } } }}

void ChailianFTPDlg::Daoruwenjian()//通过导入文件显示服务器所包含信息

{ m_lbkuang.ResetContent();

CFtpFileFind chazhao(m_wenjianlianjie);

CString xwenjianming;

BOOL gengduowenjian;

gengduowenjian=chazhao.FindFile(NULL);

while(gengduowenjian)

{ gengduowenjian=chazhao.FindNextFile();

xwenjianming=chazhao.GetFileName();

if(chazhao.IsDirectory())

xwenjianming+=_T(" 

");

m_lbkuang.AddString((LPCTSTR)xwenjianming); }

chazhao.Close();}

void ChailianFTPDlg::OnBputfile()//上传数据按钮功能

{ UpdateData(TRUE);

CFileDialog openFile(TRUE,NULL);

if(openFile.DoModal()==IDOK)

{ if(m_wenjianlianjie->PutFile((LPCTSTR)openFile.GetFileName(),

(LPCTSTR)(m_smulu+_T("/")+(CString)openFile.GetFileName())))

MessageBox(_T("上传数据完成"));

else

MessageBox(_T("无法上传")); }

Shezhimulu();

UpdateData(FALSE);}

void ChailianFTPDlg::OnBdelfile()//删除垃圾按钮功能

{ UpdateData(TRUE);

m_wenjianlianjie->Remove(xwenjian);

Shezhimulu();

UpdateData(FALSE);}

5 调试工作

编写好对应功能后,调试对应功能,如果发现成员变量添加错误,可以删除头文件和源文件对应位置的变量,重新选中控件,右键,添加变量。调试成功如图1所示。

通过调试,发现密码功能没有隐藏,为此请注意,为保护个人隐私,系统设计过程需要把密码功能的编辑框属性设置为True。FTP传输文件可以试压缩包提高文件传输效率。方便用户上传下载以及不用的文件数据删除处理等工作。

参考文献:

[1] 周超,刘传琦.基于VC的传输文件集成软件的设计与实现[J].无线互联科技,2019,16(12):57-59.

[2] 张甲.基于多级异构通道的矩阵型文件传输系统设计和实现[D].西北大学,2018.

[3] 谭玲丽.一种基于Linux平台下的文件传输服务器的设计与实现[J].电脑知识与技术,2015,11(25):25-26.

[4] 赵娟.简单文件传输系统的设计与实现[J].中国市场,2015(50):242,244.

[5] 陈娟.基于局域網的文件传输功能设计与实现[J].计算机光盘软件与应用,2015,18(3):289,291.

[6] 文艾.移动互联网下基于RS编码的文件传输软件设计与实现[J].电脑知识与技术,2014,10(29):6834-6838+6852.

[7] 王琦,韩安,贾政,王毓辉.一种高效文件传输系统的设计与实现[J].电子世界,2014(15):133-134.

[8] 唐军.异步批量文件网络传输系统设计与实现[D].湖南师范大学,2014.

[9] 张恺.基于UDP的可靠文件传输协议的设计与实现[D].西安电子科技大学,2014.

[10] 巫黎黎.文件安全传输系统的设计与实现[D].电子科技大学,2013.

[11] 宫丽娜.基于TCP协议的文件传输的设计与实现[J].信息系统工程,2012(12):22-23.

【通联编辑:代影】