QT實(shí)現(xiàn)FTP上傳文件
本文實(shí)例為大家分享了QT實(shí)現(xiàn)FTP上傳文件的具體代碼,供大家參考,具體內(nèi)容如下
兩臺電腦通過網(wǎng)線建立本地連接,保證網(wǎng)關(guān)在同一段;
服務(wù)器端打開ftp;
控制面板→程序→啟用或關(guān)閉windows功能→windows功能→Internet信息服務(wù)
啟用“FTP服務(wù)”FTP擴(kuò)展性” IIS管理控制臺”
開始屏幕的搜索中輸入“IIS”,然后點(diǎn)擊打開“IIS管理器”
打開“IIS管理器”后,在左欄的“網(wǎng)站”上點(diǎn)擊右鍵,打開“添加FTP站點(diǎn)”
然后按照提示填寫站點(diǎn)信息
點(diǎn)擊“下一步”,按照下圖提示,設(shè)置“綁定和SSL設(shè)置”,在“IP地址”處,可以用內(nèi)網(wǎng)IP也可以用外網(wǎng)IP,訪客自然也就根據(jù)你的IP設(shè)定來決定;
點(diǎn)擊“下一步”,設(shè)置“身份驗(yàn)證和授權(quán)信息”
然后在本機(jī)瀏覽器地址欄中輸入“ftp://填寫的IP”測試一下
客戶端網(wǎng)頁測試遠(yuǎn)程訪問;
客戶端(另一臺電腦)瀏覽器地址欄中輸入“ftp://填寫的IP”測試一下
客戶端cmd測試遠(yuǎn)程訪問;
win+r打開運(yùn)行窗口,輸入cmd
回車打開cmd命令窗口
cmd命令中輸入:ftp回車
回車切換至ftp命令窗口,輸入命令:open,回車提示:到
到即所要連接測試的ftp地址,我們輸入:IP 22
即:ip地址+空格+端口號,沒有+號
回車后彈出用戶一行,輸入ftp的用戶名后回車,輸入ftp用戶名對應(yīng)的密碼
輸入密碼后回車,如果提示,user logged in就說么ftp創(chuàng)建無問題
客戶端程序測試遠(yuǎn)程訪問。
新建程序,添加ftpclass.cpp、ftpclass.h,復(fù)制main.cpp內(nèi)容到程序入口函數(shù)
注意:/項(xiàng)目-屬性-常規(guī)-字符集-使用多字節(jié)字符集/
//main.cpp #include "stdafx.h" #include "ftpclass.h" void main() { ?? ?printf("------- 開始測試!------\n"); ?? ?printf("01--創(chuàng)建連接 %d\n", FtpClass::createConnection()); ?? ?printf("02--打開目標(biāo)ftp %d\n", FtpClass::createTable());?? ? ?? ? ?? ?/*可以讀取ini內(nèi)參數(shù) ?? ?FtpClass::ftp_Ip = TEXT("Ini讀取"); ?? ?FtpClass::ftp_Port = TEXT("Ini讀取"); ?? ?FtpClass::ftp_User = TEXT("Ini讀取"); ?? ?FtpClass::ftp_Password = TEXT("Ini讀取"); ?? ?FtpClass::ftp_Fixed_Path = TEXT("Ini讀取");*/ ?? ? ?? ?printf("03--創(chuàng)建文件夾 %d\n", FtpClass::createFolder("自動(dòng)生成目錄1","自動(dòng)生成目錄2","自動(dòng)生成目錄3"));?? ? ?? ?/*上傳目標(biāo)路徑*/ ?? ?printf("04--上傳文件 %d\n", FtpClass::insert( "D:/a.txt", "b.txt")); ?? ?/*本機(jī)文件需要上傳文件*/ ?/*上傳后文件名稱,可以和本地文件名稱不一樣,類型最好別換*/ ?? ? ?? ?printf("05--關(guān)閉通訊 %d\n", FtpClass::createClose()); ?? ?printf("------ 結(jié)束測試!------\n"); ?? ? ?? ?return ; }
//ftpclass.h /*項(xiàng)目-屬性-常規(guī)-字符集-使用多字節(jié)字符集*/ /*wininet.lib、shlwapi.lib可以直接添加到附加依賴項(xiàng)*/ /*BOOL_VERIFY、NULL_VERIFY 程序結(jié)束判斷*/ #pragma once #pragma comment(lib,"wininet.lib") #pragma comment(lib,"shlwapi.lib") #define ?BOOL_VERIFY(emStatus_bool,switch_bool) \ if (emStatus_bool == true)\ {return true;}\ else{\ if (switch_bool == 3) printf(" ? ? ?FTP_03_err:創(chuàng)建文件夾失??!%d\n"); \ if (switch_bool == 4) printf(" ? ? ?FTP_04_err:上傳文件失敗!\n"); ? ? \ if (switch_bool == 5) printf(" ? ? ?FTP_05_err:關(guān)閉窗口句柄失??!\n"); \ return false;\ } #define ?NULL_VERIFY(emStatus_null,switch_null) \ if (emStatus_null != NULL)\ {return true;}\ else{\ if (switch_null == 1) {printf(" ? ? ?FTP_01_err:打開通訊錯(cuò)誤 Error:%d\n", GetLastError());}\ if (switch_null == 2) {printf(" ? ? ?FTP_02_err:建立連接錯(cuò)誤 Error:%d\n", GetLastError());}\ return false;\ } #include "stdafx.h"http://沒用 #include <afxinet.h>//MFC相關(guān) #include "wininet.h"http://調(diào)用FTP相關(guān)類 #include "shlwapi.h"http://調(diào)用文件操作相關(guān)類 class FtpClass { public:?? ? ?? ?/*ini讀取變量*/ ?? ?static CString ftp_Ip;//目標(biāo)ip ?? ?static CString ftp_Port;//目標(biāo)端口 ?? ?static CString ftp_User;//目標(biāo)賬戶 ?? ?static CString ftp_Password;//目標(biāo)密碼 ?? ?static CString ftp_Fixed_Path;//目標(biāo)固定路徑 ?? ?static CString ftp_Free_Path;//目標(biāo)自己生成路徑 ?? ? ?? ? /*全局變量*/ ?? ?static BOOL ?pRes; ?? ?static HINTERNET hInternet; ?? ?static HINTERNET hConnect; ?? ? ?? ?/*全局函數(shù)*/ ?? ?static bool createConnection();?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//創(chuàng)建一個(gè)連接 ?? ?static bool createTable();?? ? ?? ?static bool ThreadInternetConnect(PVOID )? ?? ?//打開目標(biāo)ftp ?? ?static bool createFolder(CString temp1, CString temp2, CString temp3); ?//上傳文件 ?? ?static bool insert(CString temp, CString temp1); ? ? ? ? ? ? ? ? ? ? ? ?//出入數(shù)據(jù) ?? ?static bool createClose(); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//斷開連接 };
//ftpclass.cpp #include "stdafx.h" #include "ftpclass.h" CString FtpClass::ftp_Ip = TEXT("192.168.3.104"); CString FtpClass::ftp_Port = TEXT("21"); CString FtpClass::ftp_User = TEXT("Administrator"); CString FtpClass::ftp_Password = TEXT("xinxin"); CString FtpClass::ftp_Fixed_Path = TEXT("1級固定目錄/2級固定目錄/3級固定目錄"); CString FtpClass::ftp_Free_Path = TEXT("自動(dòng)生成目錄"); BOOL ?FtpClass::pRes = false; HINTERNET FtpClass::hInternet = NULL; HINTERNET FtpClass::hConnect = NULL; //創(chuàng)建一個(gè)連接 bool FtpClass::createConnection() { ?? ?/*ftp_Ip = TEXT("Ini讀取"); ?? ?ftp_Port = TEXT("Ini讀取"); ?? ?ftp_User = TEXT("Ini讀取"); ?? ?ftp_Password = TEXT("Ini讀取"); ?? ?ftp_Fixed_Path = TEXT("Ini讀取");*/ ?? ?hInternet = InternetOpen(NULL, INTERNET_OPEN_TYPE_DIRECT, ?? ??? ?NULL, NULL, INTERNET_FLAG_NO_CACHE_WRITE); ?? ?NULL_VERIFY(hInternet,1); } bool FtpClass::ThreadInternetConnect(PVOID param) { ?// 打開http ? ? ? ?hConnect = InternetConnect(hInternet, ftp_Ip, INTERNET_DEFAULT_FTP_PORT,//INTERNET_DEFAULT_FTP_PORT ?第三個(gè)參數(shù)默認(rèn)值21 ? ftp_User, ftp_Password, INTERNET_SERVICE_FTP, ? INTERNET_FLAG_EXISTING_CONNECT || INTERNET_FLAG_PASSIVE, 0); ?return 1; } //打開目標(biāo)ftp bool FtpClass::createTable() { ?/*hConnect = InternetConnect(hInternet, ftp_Ip, 25,//INTERNET_DEFAULT_FTP_PORT ?第三個(gè)參數(shù)默認(rèn)值21 ? ftp_User, ftp_Password, INTERNET_SERVICE_FTP, ? INTERNET_FLAG_EXISTING_CONNECT || INTERNET_FLAG_PASSIVE, 0); ?NULL_VERIFY(hConnect,2);*/ ?HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadInternetConnect, (LPVOID)NULL, 0, NULL);? ?//超時(shí)3秒,如果等待結(jié)果是超時(shí) ?if (WaitForSingleObject(hThread, 3 * 1000) == WAIT_TIMEOUT) { ? TerminateThread(hThread, 0); ? CloseHandle(hThread); ? NULL_VERIFY(hConnect, 2); ? ?} ?NULL_VERIFY(hConnect, 2); } //上傳文件 bool FtpClass::createFolder(CString temp1, CString temp2, CString temp3) { ?? ?/*新建文件件每次只能創(chuàng)建一級,多個(gè)需要分多次創(chuàng)建*/ ?? ?pRes = false;?? ? ?? ?ftp_Free_Path = ""; ?? ?ftp_Free_Path = ftp_Fixed_Path ?+ "/" + temp1; ?? ?FtpCreateDirectory(hConnect, ftp_Free_Path); ?? ?ftp_Free_Path = ftp_Free_Path + "/" + temp2; ?? ?FtpCreateDirectory(hConnect, ftp_Free_Path); ?? ?ftp_Free_Path = ftp_Free_Path + "/" + temp3; ?? ?pRes = FtpCreateDirectory(hConnect, ftp_Free_Path); ?? ?BOOL_VERIFY(pRes,3); } //出入數(shù)據(jù) bool FtpClass::insert(CString temp, CString temp1) { ?? ?pRes = false; ?? ?ftp_Free_Path = ftp_Free_Path + "/" +temp1; ?? ?pRes = FtpPutFile(hConnect, temp,/*本機(jī)文件*/ ?? ??? ?ftp_Free_Path, ?/*TEXT("一級目錄/二級目錄/三級目錄/a.txt"),*/ ?? ??? ?FTP_TRANSFER_TYPE_ASCII, 0); ?? ?BOOL_VERIFY(pRes,4); } //斷開連接 bool FtpClass::createClose() {?? ? ?? ?pRes = false; ?? ?if (InternetCloseHandle(hConnect)) ?? ??? ?pRes = InternetCloseHandle(hInternet); ?? ?BOOL_VERIFY(pRes,5); }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C++ for循環(huán)與nullptr的小知識點(diǎn)分享
這篇文章主要是來和大家介紹一些C++中的小知識點(diǎn),本文分享的是for循環(huán)與nullptr,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下2023-05-05C語言詳解float類型在內(nèi)存中的存儲(chǔ)方式
在c語言中float函數(shù)是單精度的。它在內(nèi)存中以二進(jìn)制的形式存儲(chǔ)。分為符號位,階碼與尾數(shù)三部分,下面我們詳細(xì)來了解一下2022-04-04C++采用openfilename打開文件對話框用法實(shí)例
這篇文章主要介紹了C++采用openfilename打開文件對話框用法實(shí)例,是C++文件操作中非常實(shí)用的技巧,需要的朋友可以參考下2014-10-10C++11/14 線程的創(chuàng)建與分離的實(shí)現(xiàn)
這篇文章主要介紹了C++11/14 線程的創(chuàng)建與分離的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-01-01C++和OpenCV實(shí)現(xiàn)圖像字符化效果
圖像字符化的意思是將圖像以字符形式呈現(xiàn),具有一定的娛樂價(jià)值,許多開發(fā)人員通過python實(shí)現(xiàn)該功能,C++實(shí)現(xiàn)的代碼較少,因此本文通過C++和OpenCV實(shí)現(xiàn),給予C++開發(fā)人員一些可供借鑒的思路,需要的朋友可以參考下2022-06-06Qt實(shí)現(xiàn)數(shù)據(jù)進(jìn)行加密、解密的步驟
本文主要介紹了Qt實(shí)現(xiàn)數(shù)據(jù)進(jìn)行加密、解密的步驟,包含QCryptographicHash和Qt-AES兩種庫的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03