宋毅
摘要:海量數(shù)據(jù)時(shí)代,文件傳輸需要解決準(zhǔn)確率與傳輸速度問題,通常的網(wǎng)絡(luò)下載速度有些不能滿足用戶需求,為適應(yīng)用戶海量下載需求,為此開發(fā)FTP文件傳輸系統(tǒng),該系統(tǒng)基于Visual Studio環(huán)境開發(fā),功能具有訪問ftp、文件上傳、文件下載、刪除、顯示目錄等功能,給用戶提供方便快捷的文件傳輸下載。
關(guān)鍵詞:海量數(shù)據(jù);FTP;文件傳輸
中圖分類號(hào):TP311? ? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):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 創(chuàng)建項(xiàng)目
使用網(wǎng)絡(luò)編程方式實(shí)現(xiàn)一個(gè)典型的FTP系統(tǒng)實(shí)現(xiàn)文件傳輸?shù)裙δ堋?/p>
打開Visual Studio,創(chuàng)建一個(gè)基于對(duì)話框的MFC應(yīng)用程序,項(xiàng)目名稱為“hailianFTP”,創(chuàng)建向?qū)Ц呒?jí)功能中注意選擇windows套接字,然后完成即可。
2 設(shè)計(jì)界面
設(shè)計(jì)hailianFTP的主對(duì)話框。添加一個(gè)ListBox控件顯示FTP的文件和目錄內(nèi)容,并為其關(guān)聯(lián)CListBox類型的成員變量m_lbkuang;添加一個(gè)EditBox控件輸入FTP服務(wù)器地址,并為其關(guān)聯(lián)CString類型的成員變量m_sfuwuqi;添加一個(gè)EditBox控件輸入FTP登錄用戶名,并為其關(guān)聯(lián)CString類型的成員變量m_syonghu;添加一個(gè)EditBox控件輸入FTP登錄口令,并為其關(guān)聯(lián)CString類型的成員變量m_smima;添加一個(gè)EditBox控件輸入FTP目錄,并為其關(guān)聯(lián)CString類型的成員變量m_smulu;添加四個(gè)靜態(tài)文本,分別顯示服務(wù)器地址、用戶名、密碼、目錄,然后添加五個(gè)按鈕分別表示“打開ftp”“顯示ftp內(nèi)容”“上傳數(shù)據(jù)”“下載數(shù)據(jù)”和“刪除垃圾”。
3 頭文件設(shè)計(jì)
打開hailianFTPDlg.h,添加頭文件包含#include
void Daoruwenjian(); CFtpConnection *m_wenjianlianjie; CInternetSession m_isSession;
4 實(shí)現(xiàn)文件設(shè)計(jì)
為五個(gè)按鈕設(shè)計(jì)消息響應(yīng)函數(shù),實(shí)現(xiàn)Daoruwenjian函數(shù),實(shí)現(xiàn)文件部分代碼如下:
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("&不再顯示內(nèi)容"));
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()//下載數(shù)據(jù)按鈕功能
{ 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("提示錯(cuò)誤報(bào)警")); } } }}
void ChailianFTPDlg::Shezhimulu()//顯示ftp內(nèi)容按鈕功能
{ UpdateData(TRUE);
if(m_smulu!="")
{ m_wenjianlianjie->SetCurrentDirectory((LPCTSTR)m_smulu);//設(shè)置顯示目錄信息
m_wenjianlianjie->GetCurrentDirectory(m_smulu);
Daoruwenjian();
UpdateData(FALSE); }}
void ChailianFTPDlg::OnDblclkLfiles()//雙擊FTP列表,下載文件或進(jìn)入另一層目錄
{ 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("關(guān)于文件錯(cuò)誤提示")); } } }}
void ChailianFTPDlg::Daoruwenjian()//通過導(dǎo)入文件顯示服務(wù)器所包含信息
{ 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()//上傳數(shù)據(jù)按鈕功能
{ 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("上傳數(shù)據(jù)完成"));
else
MessageBox(_T("無法上傳")); }
Shezhimulu();
UpdateData(FALSE);}
void ChailianFTPDlg::OnBdelfile()//刪除垃圾按鈕功能
{ UpdateData(TRUE);
m_wenjianlianjie->Remove(xwenjian);
Shezhimulu();
UpdateData(FALSE);}
5 調(diào)試工作
編寫好對(duì)應(yīng)功能后,調(diào)試對(duì)應(yīng)功能,如果發(fā)現(xiàn)成員變量添加錯(cuò)誤,可以刪除頭文件和源文件對(duì)應(yīng)位置的變量,重新選中控件,右鍵,添加變量。調(diào)試成功如圖1所示。
通過調(diào)試,發(fā)現(xiàn)密碼功能沒有隱藏,為此請(qǐng)注意,為保護(hù)個(gè)人隱私,系統(tǒng)設(shè)計(jì)過程需要把密碼功能的編輯框?qū)傩栽O(shè)置為True。FTP傳輸文件可以試壓縮包提高文件傳輸效率。方便用戶上傳下載以及不用的文件數(shù)據(jù)刪除處理等工作。
參考文獻(xiàn):
[1] 周超,劉傳琦.基于VC的傳輸文件集成軟件的設(shè)計(jì)與實(shí)現(xiàn)[J].無線互聯(lián)科技,2019,16(12):57-59.
[2] 張甲.基于多級(jí)異構(gòu)通道的矩陣型文件傳輸系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)[D].西北大學(xué),2018.
[3] 譚玲麗.一種基于Linux平臺(tái)下的文件傳輸服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn)[J].電腦知識(shí)與技術(shù),2015,11(25):25-26.
[4] 趙娟.簡(jiǎn)單文件傳輸系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].中國(guó)市場(chǎng),2015(50):242,244.
[5] 陳娟.基于局域網(wǎng)的文件傳輸功能設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)光盤軟件與應(yīng)用,2015,18(3):289,291.
[6] 文艾.移動(dòng)互聯(lián)網(wǎng)下基于RS編碼的文件傳輸軟件設(shè)計(jì)與實(shí)現(xiàn)[J].電腦知識(shí)與技術(shù),2014,10(29):6834-6838+6852.
[7] 王琦,韓安,賈政,王毓輝.一種高效文件傳輸系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].電子世界,2014(15):133-134.
[8] 唐軍.異步批量文件網(wǎng)絡(luò)傳輸系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].湖南師范大學(xué),2014.
[9] 張愷.基于UDP的可靠文件傳輸協(xié)議的設(shè)計(jì)與實(shí)現(xiàn)[D].西安電子科技大學(xué),2014.
[10] 巫黎黎.文件安全傳輸系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].電子科技大學(xué),2013.
[11] 宮麗娜.基于TCP協(xié)議的文件傳輸?shù)脑O(shè)計(jì)與實(shí)現(xiàn)[J].信息系統(tǒng)工程,2012(12):22-23.
【通聯(lián)編輯:代影】