生活随笔
收集整理的這篇文章主要介紹了
QT FTP上传文件
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
QT FTP上傳文件
- 兩臺電腦通過網線建立本地連接,保證網關在同一段;
- 服務器端打開ftp;
- 客戶端網頁測試遠程訪問;
- 客戶端cmd測試遠程訪問;
- 客戶端程序測試遠程訪問。
兩臺電腦通過網線建立本地連接,保證網關在同一段;
服務器端打開ftp;
控制面板→程序→啟用或關閉windows功能→windows功能→Internet信息服務
啟用“FTP服務”FTP擴展性” IIS管理控制臺”
開始屏幕的搜索中輸入“IIS”,然后點擊打開“IIS管理器”
打開“IIS管理器”后,在左欄的“網站”上點擊右鍵,打開“添加FTP站點”
然后按照提示填寫站點信息
點擊“下一步”,按照下圖提示,設置“綁定和SSL設置”,在“IP地址”處,可以用內網IP也可以用外網IP,訪客自然也就根據你的IP設定來決定;
點擊“下一步”,設置“身份驗證和授權信息”
然后在本機瀏覽器地址欄中輸入“ftp://填寫的IP”測試一下
客戶端網頁測試遠程訪問;
客戶端(另一臺電腦)瀏覽器地址欄中輸入“ftp://填寫的IP”測試一下
客戶端cmd測試遠程訪問;
win+r打開運行窗口,輸入cmd
回車打開cmd命令窗口
cmd命令中輸入:ftp回車
回車切換至ftp命令窗口,輸入命令:open,回車提示:到
到即所要連接測試的ftp地址,我們輸入:IP 22
即:ip地址+空格+端口號,沒有+號
回車后彈出用戶一行,輸入ftp的用戶名后回車,輸入ftp用戶名對應的密碼
輸入密碼后回車,如果提示,user logged in就說么ftp創建無問題
客戶端程序測試遠程訪問。
新建程序,添加ftpclass.cpp、ftpclass.h,復制main.cpp內容到程序入口函數
注意:/項目-屬性-常規-字符集-使用多字節字符集/
#include
"stdafx.h"
#include
"ftpclass.h"void main()
{printf("------- 開始測試!------\n");printf("01--創建連接 %d\n", FtpClass
::createConnection());printf("02--打開目標ftp %d\n", FtpClass
::createTable()); printf("03--創建文件夾 %d\n", FtpClass
::createFolder("自動生成目錄1","自動生成目錄2","自動生成目錄3")); printf("04--上傳文件 %d\n", FtpClass
::insert( "D:/a.txt", "b.txt")); printf("05--關閉通訊 %d\n", FtpClass
::createClose());printf("------ 結束測試!------\n");return ;
}
#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:創建文件夾失敗!%d\n"); \
if (switch_bool
== 4) printf(" FTP_04_err:上傳文件失敗!\n"); \
if (switch_bool
== 5) printf(" FTP_05_err:關閉窗口句柄失敗!\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:打開通訊錯誤 Error:%d\n", GetLastError());}\
if (switch_null
== 2) {printf(" FTP_02_err:建立連接錯誤 Error:%d\n", GetLastError());}\
return false;\
}#include
"stdafx.h"
#include
<afxinet
.h
>
#include
"wininet.h"
#include
"shlwapi.h"class FtpClass
{
public: static CString ftp_Ip
;static CString ftp_Port
;static CString ftp_User
;static CString ftp_Password
;static CString ftp_Fixed_Path
;static CString ftp_Free_Path
;static BOOL pRes
;static HINTERNET hInternet
;static HINTERNET hConnect
;static bool
createConnection(); static bool
createTable(); static bool
ThreadInternetConnect(PVOID ) static bool
createFolder(CString temp1
, CString temp2
, CString temp3
); static bool
insert(CString temp
, CString temp1
); static bool
createClose();
};
#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("自動生成目錄");
BOOL FtpClass
::pRes
= false;
HINTERNET FtpClass
::hInternet
= NULL;
HINTERNET FtpClass
::hConnect
= NULL;
bool FtpClass
::createConnection() {hInternet
= InternetOpen(NULL, INTERNET_OPEN_TYPE_DIRECT,NULL, NULL, INTERNET_FLAG_NO_CACHE_WRITE);NULL_VERIFY(hInternet
,1);
}
bool FtpClass
::ThreadInternetConnect(PVOID param
) {hConnect
= InternetConnect(hInternet
, ftp_Ip
, INTERNET_DEFAULT_FTP_PORT,ftp_User
, ftp_Password
, INTERNET_SERVICE_FTP,INTERNET_FLAG_EXISTING_CONNECT || INTERNET_FLAG_PASSIVE, 0);return 1;
}
bool FtpClass
::createTable()
{HANDLE hThread
= CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadInternetConnect
, (LPVOID)NULL, 0, NULL); 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
)
{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);
}
bool FtpClass
::insert(CString temp
, CString temp1
)
{pRes
= false;ftp_Free_Path
= ftp_Free_Path
+ "/" +temp1
;pRes
= FtpPutFile(hConnect
, temp
,ftp_Free_Path
, FTP_TRANSFER_TYPE_ASCII, 0);BOOL_VERIFY(pRes
,4);
}
bool FtpClass
::createClose()
{ pRes
= false;if (InternetCloseHandle(hConnect
))pRes
= InternetCloseHandle(hInternet
);BOOL_VERIFY(pRes
,5);
}
總結
以上是生活随笔為你收集整理的QT FTP上传文件的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。