国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁(yè) > news >正文

長(zhǎng)沙做網(wǎng)站微聯(lián)訊點(diǎn)靠譜推廣什么app傭金高

長(zhǎng)沙做網(wǎng)站微聯(lián)訊點(diǎn)靠譜,推廣什么app傭金高,高端公司小程序建設(shè),口碑好的南京網(wǎng)站建設(shè)FTP(文件傳輸協(xié)議)是一種用于在網(wǎng)絡(luò)上傳輸文件的標(biāo)準(zhǔn)協(xié)議。它屬于因特網(wǎng)標(biāo)準(zhǔn)化的協(xié)議族之一,為文件的上傳、下載和文件管理提供了一種標(biāo)準(zhǔn)化的方法,在Windows系統(tǒng)中操作FTP上傳下載可以使用WinINet庫(kù),WinINet&#xff…

FTP(文件傳輸協(xié)議)是一種用于在網(wǎng)絡(luò)上傳輸文件的標(biāo)準(zhǔn)協(xié)議。它屬于因特網(wǎng)標(biāo)準(zhǔn)化的協(xié)議族之一,為文件的上傳、下載和文件管理提供了一種標(biāo)準(zhǔn)化的方法,在Windows系統(tǒng)中操作FTP上傳下載可以使用WinINet庫(kù),WinINet(Windows Internet)庫(kù)是 Windows 操作系統(tǒng)中的一個(gè)網(wǎng)絡(luò) API 庫(kù),用于訪問(wèn) Internet 上的資源。它提供了一組函數(shù),使開(kāi)發(fā)人員能夠創(chuàng)建網(wǎng)絡(luò)應(yīng)用程序,例如通過(guò) HTTP 協(xié)議下載文件,發(fā)送 HTTP 請(qǐng)求,處理 cookie 等,本章將通過(guò)使用WinInet所提供的接口實(shí)現(xiàn)FTP文件上傳下載功能,使得用戶(hù)可以通過(guò)代碼的方式上傳或下載文件與FTP服務(wù)器交互。

首先讀者需要自行搭建FTP服務(wù)器,這里可以使用20CN Mini Ftp這款迷你FTP服務(wù)器,配置好信息之后運(yùn)行即可;

  • 服務(wù)器下載地址:https://download.csdn.net/download/lyshark_csdn/88583789

接著來(lái)介紹實(shí)現(xiàn)FTP通信的標(biāo)準(zhǔn)API函數(shù)信息,其核心的函數(shù)如下所示;

InternetOpen 函數(shù),用于初始化 WinINet 庫(kù),返回一個(gè)句柄,該句柄可用于后續(xù)的網(wǎng)絡(luò)操作。以下是該函數(shù)的原型和簡(jiǎn)要說(shuō)明:

HINTERNET InternetOpen(LPCWSTR lpszAgent,  // 用戶(hù)代理字符串,標(biāo)識(shí)應(yīng)用程序的名稱(chēng)DWORD   dwAccessType, // 訪問(wèn)類(lèi)型,可以是 DIRECT、PRECONFIG 或 PROXYLPCWSTR lpszProxyName, // 代理服務(wù)器名稱(chēng)LPCWSTR lpszProxyBypass, // 代理服務(wù)器的繞過(guò)列表DWORD   dwFlags // 一些標(biāo)志,例如INTERNET_FLAG_ASYNC(異步操作)
);
  • lpszAgent: 用戶(hù)代理字符串,用于標(biāo)識(shí)應(yīng)用程序的名稱(chēng)。可以是應(yīng)用程序的名稱(chēng)或標(biāo)識(shí)符。
  • dwAccessType: 訪問(wèn)類(lèi)型,指定應(yīng)用程序的訪問(wèn)權(quán)限。可以是以下值之一:
    • INTERNET_OPEN_TYPE_DIRECT: 直接訪問(wèn)互聯(lián)網(wǎng)。
    • INTERNET_OPEN_TYPE_PRECONFIG: 使用系統(tǒng)配置的代理。
    • INTERNET_OPEN_TYPE_PROXY: 使用指定的代理。
  • lpszProxyName: 代理服務(wù)器的名稱(chēng),僅在 dwAccessTypeINTERNET_OPEN_TYPE_PROXY 時(shí)使用。
  • lpszProxyBypass: 代理服務(wù)器的繞過(guò)列表,僅在 dwAccessTypeINTERNET_OPEN_TYPE_PROXY 時(shí)使用。
  • dwFlags: 一些標(biāo)志,用于指定其他選項(xiàng),例如 INTERNET_FLAG_ASYNC 表示執(zhí)行異步操作。

該函數(shù)返回一個(gè) HINTERNET 句柄,用于后續(xù)的網(wǎng)絡(luò)操作。如果操作失敗,返回 NULL。在使用完 HINTERNET 句柄后,應(yīng)該使用 InternetCloseHandle 函數(shù)關(guān)閉該句柄。

InternetConnect 函數(shù),用于創(chuàng)建一個(gè)與指定服務(wù)器的連接。以下是該函數(shù)的原型和簡(jiǎn)要說(shuō)明:

HINTERNET InternetConnect(HINTERNET     hInternet,       // InternetOpen 返回的句柄LPCWSTR       lpszServerName,  // 服務(wù)器的主機(jī)名INTERNET_PORT nServerPort,      // 服務(wù)器的端口號(hào)LPCWSTR       lpszUsername,    // 用戶(hù)名LPCWSTR       lpszPassword,    // 密碼DWORD         dwService,       // 服務(wù)類(lèi)型,例如 INTERNET_SERVICE_HTTPDWORD         dwFlags,         // 一些標(biāo)志,例如 INTERNET_FLAG_RELOADDWORD_PTR     dwContext        // 應(yīng)用程序定義的上下文
);
  • hInternet: 由 InternetOpen 返回的句柄,表示與 WinINet 庫(kù)的連接。
  • lpszServerName: 服務(wù)器的主機(jī)名或 IP 地址。
  • nServerPort: 服務(wù)器的端口號(hào)。
  • lpszUsername: 連接需要的用戶(hù)名。
  • lpszPassword: 連接需要的密碼。
  • dwService: 服務(wù)類(lèi)型,可以是以下值之一:
    • INTERNET_SERVICE_FTP: FTP 服務(wù)
    • INTERNET_SERVICE_HTTP: HTTP 服務(wù)
    • 其他服務(wù)類(lèi)型,具體可查閱官方文檔。
  • dwFlags: 一些標(biāo)志,例如 INTERNET_FLAG_RELOAD 表示重新加載頁(yè)面。
  • dwContext: 應(yīng)用程序定義的上下文,可以是一個(gè)指針。

該函數(shù)返回一個(gè) HINTERNET 句柄,用于后續(xù)的網(wǎng)絡(luò)操作。如果操作失敗,返回 NULL。在使用完 HINTERNET 句柄后,應(yīng)該使用 InternetCloseHandle 函數(shù)關(guān)閉該句柄。

InternetWriteFile 函數(shù),用于向已打開(kāi)的互聯(lián)網(wǎng)文件或句柄寫(xiě)入數(shù)據(jù)。以下是該函數(shù)的原型和簡(jiǎn)要說(shuō)明:

BOOL InternetWriteFile(HINTERNET hFile,           // 由 InternetOpenUrl 或 HttpOpenRequest 返回的文件句柄LPCVOID   lpBuffer,        // 指向包含要寫(xiě)入的數(shù)據(jù)的緩沖區(qū)的指針DWORD     dwNumberOfBytesToWrite,  // 要寫(xiě)入的字節(jié)數(shù)LPDWORD   lpdwNumberOfBytesWritten  // 指向接收實(shí)際寫(xiě)入的字節(jié)數(shù)的指針
);
  • hFile: 由 InternetOpenUrlHttpOpenRequest 返回的文件句柄。
  • lpBuffer: 指向包含要寫(xiě)入的數(shù)據(jù)的緩沖區(qū)的指針。
  • dwNumberOfBytesToWrite: 要寫(xiě)入的字節(jié)數(shù)。
  • lpdwNumberOfBytesWritten: 指向接收實(shí)際寫(xiě)入的字節(jié)數(shù)的指針。

該函數(shù)返回一個(gè)布爾值,指示操作是否成功。如果成功,返回 TRUE,否則返回 FALSE。

InternetReadFile 函數(shù),用于從已打開(kāi)的互聯(lián)網(wǎng)文件或句柄讀取數(shù)據(jù)。以下是該函數(shù)的原型和簡(jiǎn)要說(shuō)明:

BOOL InternetReadFile(HINTERNET hFile,         // 由 InternetOpenUrl 或 HttpOpenRequest 返回的文件句柄LPVOID    lpBuffer,      // 指向接收數(shù)據(jù)的緩沖區(qū)的指針DWORD     dwNumberOfBytesToRead,  // 要讀取的字節(jié)數(shù)LPDWORD   lpdwNumberOfBytesRead  // 指向接收實(shí)際讀取的字節(jié)數(shù)的指針
);
  • hFile: 由 InternetOpenUrlHttpOpenRequest 返回的文件句柄。
  • lpBuffer: 指向接收數(shù)據(jù)的緩沖區(qū)的指針。
  • dwNumberOfBytesToRead: 要讀取的字節(jié)數(shù)。
  • lpdwNumberOfBytesRead: 指向接收實(shí)際讀取的字節(jié)數(shù)的指針。

該函數(shù)返回一個(gè)布爾值,指示操作是否成功。如果成功,返回 TRUE,否則返回 FALSE。

FTP文件下載

如下代碼是使用 WinInet 庫(kù)實(shí)現(xiàn)的 FTP 文件下載功能。以下是對(duì)該代碼的概述:

  1. 頭文件引入和庫(kù)鏈接
    • 代碼使用了 <Windows.h><WinInet.h> 頭文件,同時(shí)通過(guò) #pragma comment(lib, "WinInet.lib") 鏈接了 WinInet 庫(kù),這是使用 WinInet 庫(kù)的基本準(zhǔn)備工作。
  2. FtpSaveToFile 函數(shù)
    • 該函數(shù)用于將數(shù)據(jù)保存到本地文件。它通過(guò)調(diào)用 CreateFile 創(chuàng)建一個(gè)空文件,然后使用 WriteFile 將數(shù)據(jù)寫(xiě)入文件,最后關(guān)閉文件句柄。這個(gè)函數(shù)在 FTP 文件下載后保存文件到本地。
  3. FTPDownload 函數(shù)
    • 這是主要的 FTP 下載函數(shù)。它使用 WinInet 提供的函數(shù)建立了一個(gè) FTP 會(huì)話(huà),連接到指定的 FTP 服務(wù)器,打開(kāi)指定路徑的文件,并通過(guò)循環(huán)調(diào)用 InternetReadFile 讀取文件內(nèi)容。
    • 下載的數(shù)據(jù)以字節(jié)數(shù)組的形式保存在 pDownloadData 中,下載完成后,調(diào)用 FtpSaveToFile 函數(shù)將數(shù)據(jù)保存到本地文件。
  4. 注意事項(xiàng)
    • 代碼中使用了 RtlZeroMemory 函數(shù)清空內(nèi)存,確保數(shù)據(jù)緩沖區(qū)的正確初始化。
    • 注意釋放動(dòng)態(tài)分配的內(nèi)存,避免內(nèi)存泄漏。
  5. 函數(shù)參數(shù)
    • 函數(shù)參數(shù)包括 FTP 服務(wù)器的主機(jī)名 (szHostName)、用戶(hù)名 (szUserName)、密碼 (szPassword)、FTP 路徑 (szUrlPath),以及本地保存路徑 (SavePath)。

總體而言,這段代碼實(shí)現(xiàn)了基本的 FTP 文件下載功能,適用于從 FTP 服務(wù)器下載文件到本地。在使用時(shí),確保提供正確的 FTP 服務(wù)器信息和路徑,以及合適的本地保存路徑。

#include <iostream>
#include <Windows.h>
#include <WinInet.h>#pragma comment(lib, "WinInet.lib")// 保存文件到本地
BOOL FtpSaveToFile(char *pszFileName, BYTE *pData, DWORD dwDataSize)
{// 創(chuàng)建空文件HANDLE hFile = CreateFile(pszFileName, GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_ALWAYS,FILE_ATTRIBUTE_ARCHIVE, NULL);if (INVALID_HANDLE_VALUE == hFile)return FALSE;DWORD dwRet = 0;// 寫(xiě)出數(shù)據(jù)到文件WriteFile(hFile, pData, dwDataSize, &dwRet, NULL);// 關(guān)閉句柄CloseHandle(hFile);return TRUE;
}BOOL FTPDownload(char *szHostName, char *szUserName, char *szPassword, char *szUrlPath, char *SavePath)
{HINTERNET hInternet, hConnect, hFTPFile = NULL;BYTE *pDownloadData = NULL;DWORD dwDownloadDataSize = 0;DWORD dwBufferSize = 4096;BYTE *pBuf = NULL;DWORD dwBytesReturn = 0;DWORD dwOffset = 0;BOOL bRet = FALSE;// 建立會(huì)話(huà)并打開(kāi)FTP操作hInternet = InternetOpen("WinInet Ftp", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);hConnect = InternetConnect(hInternet, szHostName, INTERNET_INVALID_PORT_NUMBER,szUserName, szPassword, INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0);hFTPFile = FtpOpenFile(hConnect, szUrlPath, GENERIC_READ, FTP_TRANSFER_TYPE_BINARY | INTERNET_FLAG_RELOAD, NULL);// 獲取文件大小并初始化緩沖區(qū)dwDownloadDataSize = FtpGetFileSize(hFTPFile, NULL);pDownloadData = new BYTE[dwDownloadDataSize];RtlZeroMemory(pDownloadData, dwDownloadDataSize);pBuf = new BYTE[dwBufferSize];RtlZeroMemory(pBuf, dwBufferSize);// 循環(huán)接收數(shù)據(jù)do{// 讀取數(shù)據(jù)bRet = InternetReadFile(hFTPFile, pBuf, dwBufferSize, &dwBytesReturn);if (FALSE == bRet)break;// 將讀取到的數(shù)據(jù)追加到內(nèi)存RtlCopyMemory((pDownloadData + dwOffset), pBuf, dwBytesReturn);dwOffset = dwOffset + dwBytesReturn;} while (dwDownloadDataSize > dwOffset);// 保存變量中的數(shù)據(jù)為文件FtpSaveToFile(SavePath, pDownloadData, dwDownloadDataSize);// 釋放內(nèi)存delete[]pDownloadData;pDownloadData = NULL;return TRUE;
}

調(diào)用FTPDownload時(shí)分別傳入?yún)?shù),參數(shù)1是IP地址,參數(shù)2是FTP登錄用戶(hù)名,參數(shù)3是FTP登錄密碼,參數(shù)4是服務(wù)器端根目錄下的文件,參數(shù)5是下載文件到本地的路徑,函數(shù)執(zhí)行結(jié)束后返回一個(gè)BOOL狀態(tài)值。

int main(int argc, char * argv[])
{BOOL bRET = FTPDownload("127.0.0.1", "admin", "admin", "/lyshark.jpg", "d://newtest/lyshark.jpg");if (bRET == TRUE){printf("已下載文件 \n");}else{printf("下載失敗 \n");}system("pause");return 0;
}

運(yùn)行后則可以將服務(wù)器端上的/lyshark.jpg下載到本地的d://newtest/lyshark.jpg目錄下,如下圖所示;

FTP文件上傳

如下代碼使用 WinInet 庫(kù)實(shí)現(xiàn)了 FTP 文件上傳操作。以下是對(duì)該代碼的概述:

  1. 函數(shù)功能
    • 該代碼實(shí)現(xiàn)了 FTP 文件上傳操作,將本地文件上傳到指定的 FTP 服務(wù)器路徑。
  2. 函數(shù)參數(shù)
    • 函數(shù)參數(shù)包括 FTP 服務(wù)器的主機(jī)名 (szHostName)、用戶(hù)名 (szUserName)、密碼 (szPassword)、FTP 路徑 (szUrlPath),以及本地文件路徑 (FilePath)。
  3. 建立會(huì)話(huà)和連接
    • 使用 InternetOpen 函數(shù)建立一個(gè) WinInet 會(huì)話(huà),然后使用 InternetConnect 函數(shù)建立到 FTP 服務(wù)器的連接。
  4. 打開(kāi) FTP 文件
    • 使用 FtpOpenFile 函數(shù)打開(kāi)指定路徑的 FTP 文件。如果文件不存在,將創(chuàng)建一個(gè)新文件。文件以二進(jìn)制傳輸方式打開(kāi),并且具有重新加載標(biāo)志。
  5. 打開(kāi)本地文件
    • 使用 CreateFile 函數(shù)打開(kāi)本地文件。如果本地文件不存在,將返回 INVALID_HANDLE_VALUE
  6. 獲取文件大小和讀取文件數(shù)據(jù)
    • 通過(guò) GetFileSize 獲取本地文件大小,然后根據(jù)文件大小動(dòng)態(tài)分配內(nèi)存,并使用 ReadFile 讀取文件數(shù)據(jù)到內(nèi)存中。
  7. 上傳數(shù)據(jù)
    • 使用 InternetWriteFile 函數(shù)將內(nèi)存中的文件數(shù)據(jù)上傳到 FTP 服務(wù)器。上傳成功后釋放內(nèi)存,上傳失敗則返回 FALSE。
  8. 注意事項(xiàng)
    • 確保提供正確的 FTP 服務(wù)器信息和路徑,以及本地文件路徑。
    • 釋放動(dòng)態(tài)分配的內(nèi)存,避免內(nèi)存泄漏。
    • 處理上傳失敗的情況,可能需要添加適當(dāng)?shù)腻e(cuò)誤處理代碼。

總體而言,這段代碼實(shí)現(xiàn)了基本的 FTP 文件上傳功能,適用于將本地文件上傳到 FTP 服務(wù)器。在使用時(shí),注意提供正確的參數(shù)和處理可能出現(xiàn)的錯(cuò)誤。

#include <iostream>
#include <Windows.h>
#include <WinInet.h>#pragma comment(lib, "WinInet.lib")// 實(shí)現(xiàn)文件上傳操作
BOOL FTPUpload(char *szHostName, char *szUserName, char *szPassword, char *szUrlPath, char *FilePath)
{HINTERNET hInternet, hConnect, hFTPFile = NULL;DWORD dwBytesReturn = 0;DWORD UploadDataSize = 0;BYTE *pUploadData = NULL;DWORD dwRet, bRet = 0;// 建立會(huì)話(huà)并打開(kāi)FTP操作hInternet = InternetOpen("WinInet Ftp", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);hConnect = InternetConnect(hInternet, szHostName, INTERNET_INVALID_PORT_NUMBER, szUserName, szPassword, INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0);hFTPFile = FtpOpenFile(hConnect, szUrlPath, GENERIC_WRITE, FTP_TRANSFER_TYPE_BINARY | INTERNET_FLAG_RELOAD, NULL);// 打開(kāi)文件HANDLE hFile = CreateFile(FilePath, GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING,FILE_ATTRIBUTE_ARCHIVE, NULL);if (INVALID_HANDLE_VALUE == hFile)return FALSE;// 獲取文件大小UploadDataSize = GetFileSize(hFile, NULL);pUploadData = new BYTE[UploadDataSize];// 讀取文件到緩沖區(qū)ReadFile(hFile, pUploadData, UploadDataSize, &dwRet, NULL);UploadDataSize = dwRet;// 開(kāi)始上傳數(shù)據(jù)bRet = InternetWriteFile(hFTPFile, pUploadData, UploadDataSize, &dwBytesReturn);if (FALSE == bRet){delete[]pUploadData;return FALSE;}delete[]pUploadData;return TRUE;
}

文件上傳與下載一樣,FTPUpload通過(guò)傳入服務(wù)器地址,用戶(hù)名,密碼,上傳后的文件名,被上傳本地文件路徑;

int main(int argc, char * argv[])
{BOOL bRET = FTPUpload("127.0.0.1", "admin", "admin", "/abc.exe", "c://nc.exe");if (bRET == TRUE){printf("已上傳文件 \n");}else{printf("上傳失敗 \n");}system("pause");return 0;
}

上傳成功后輸出如下圖所示;

http://aloenet.com.cn/news/43537.html

相關(guān)文章:

  • 南昌網(wǎng)站建設(shè)制作網(wǎng)絡(luò)推廣接單平臺(tái)
  • 廣州制作網(wǎng)站的公司互聯(lián)網(wǎng)推廣怎么找渠道
  • 國(guó)外html5特效網(wǎng)站深圳seo秘籍
  • 買(mǎi)香港空間上傳美女圖片做網(wǎng)站互聯(lián)網(wǎng)營(yíng)銷(xiāo)師培訓(xùn)
  • 美國(guó)最近的新聞大事北京網(wǎng)站優(yōu)化培訓(xùn)
  • 合肥網(wǎng)站外包怎么做網(wǎng)絡(luò)廣告推廣
  • 網(wǎng)站用什么工具做怎么做產(chǎn)品推廣和宣傳
  • 有什么做服裝的網(wǎng)站嗎岳陽(yáng)網(wǎng)站建設(shè)推廣
  • 做資訊類(lèi)網(wǎng)站需要特殊資質(zhì)嗎網(wǎng)絡(luò)營(yíng)銷(xiāo)文案策劃
  • 學(xué)手機(jī)網(wǎng)站建設(shè)百度指數(shù)查詢(xún)工具app
  • 從網(wǎng)上下載的網(wǎng)站源碼怎么用免費(fèi)企業(yè)建站
  • ps怎么做網(wǎng)站特效愛(ài)站seo工具包官網(wǎng)
  • 做諧和年齡圖的網(wǎng)站地產(chǎn)渠道12種拓客方式
  • 品牌創(chuàng)意型網(wǎng)站開(kāi)發(fā)百度推廣渠道戶(hù)
  • 建設(shè)網(wǎng)站存在的問(wèn)題sem對(duì)seo的影響有哪些
  • 做國(guó)外的眾籌網(wǎng)站有哪些今日最新國(guó)內(nèi)新聞重大事件
  • 網(wǎng)站建設(shè)績(jī)效考核方案企業(yè)網(wǎng)站建設(shè)制作
  • 宜昌平臺(tái)網(wǎng)站建設(shè)網(wǎng)絡(luò)顧問(wèn)
  • 網(wǎng)站打開(kāi)速度加快怎么做百度官網(wǎng)認(rèn)證價(jià)格
  • 做兼職的網(wǎng)站都有哪些工作最有吸引力的營(yíng)銷(xiāo)模式
  • 桂林景區(qū)網(wǎng)站建設(shè)策劃方案如何建立獨(dú)立網(wǎng)站
  • 網(wǎng)站接入服務(wù)商查詢(xún)長(zhǎng)春網(wǎng)絡(luò)營(yíng)銷(xiāo)公司
  • 大連百度關(guān)鍵詞優(yōu)化張家界百度seo
  • 用vs怎么做網(wǎng)站的導(dǎo)航seo是什么化學(xué)名稱(chēng)
  • 中國(guó)建設(shè)銀行貴州省分行網(wǎng)站網(wǎng)站優(yōu)化排名
  • 撫順市建設(shè)局網(wǎng)站關(guān)鍵詞優(yōu)化怎么操作
  • 360客戶(hù)如何做網(wǎng)站推廣長(zhǎng)尾關(guān)鍵詞愛(ài)站
  • 網(wǎng)站交互式網(wǎng)站推廣引流最快方法
  • 網(wǎng)站后臺(tái)模板 php網(wǎng)站排名優(yōu)化培訓(xùn)課程
  • 響應(yīng)式電商網(wǎng)站網(wǎng)站開(kāi)發(fā)的基本流程