C++ Builder平台使用Indy9開發自動FTP程式01

來源:互聯網
上載者:User

標籤:

Indy9與CB內建的Indy8不同處還是挺多的。首先就是表徵圖變漂亮了,其次很多Method都重寫了。它主要是依據Delph裡的函數,力求與之相通。不同點在本系列的後續章節中會一一介紹。

在寫ftp代碼之前,非常有必要瞭解下FTP網路相關知識。再次借用下Binny的博文:

在使用FTP時,如果用戶端機器和FTP伺服器雙方之間的所有連接埠都是開放的,那串連不存在問題。如果用戶端與伺服器之間有防火牆,如果沒配置好防火策略和採用合適的串連模式,會導致登入成功,但無法List列表的問題。要避免出現這樣的問題,首先要瞭解FTP的工作模式。

    1.FTP的PORT(主動模式)和PASV(被動模式)

    (1) PORT(主動模式)

    PORT中文稱為主動模式,工作的原理: FTP用戶端串連到FTP伺服器的21連接埠,發送使用者名稱和密碼登入,登入成功後要list列表或者讀取資料時,用戶端隨機開放一個連接埠(1024以上),發送 PORT命令到FTP伺服器,告訴伺服器用戶端採用主動模式並開放連接埠;FTP伺服器收到PORT主動模式命令和連接埠號碼後,通過伺服器的20連接埠和用戶端開放的連接埠串連,發送資料,原理如:

    (2) PASV(被動模式)

    PASV是Passive的縮寫,中文成為被動模式,工作原理:FTP用戶端串連到FTP伺服器的21連接埠,發送使用者名稱和密碼登入,登入成功後要list列表或者讀取資料時,發送PASV命令到FTP伺服器, 伺服器在本地隨機開放一個連接埠(1024以上),然後把開放的連接埠告訴用戶端, 用戶端再串連到伺服器開放的連接埠進行資料轉送,原理如:

 

在使用

IdFTP1->Connect()

串連FTP的時候最好先弄清楚FTP的模式是主動還是被動。 在代碼中體現為

IdFTP1->Passive

但是由於ftp伺服器的多樣性,經常會出現各種各樣的socket error。 在此附上錯誤全集

Socket error 0 - Directly send error 
Socket error 10004 - Interrupted function call 
Socket error 10013 - Permission denied 
Socket error 10014 - Bad address 
Socket error 10022 - Invalid argument 
Socket error 10024 - Too many open files 
Socket error 10035 - Resource temporarily unavailable 
Socket error 10036 - Operation now in progress 
Socket error 10037 - Operation already in progress 
Socket error 10038 - Socket operation on non-socket 
Socket error 10039 - Destination address required 
Socket error 10040 - Message too long 
Socket error 10041 - Protocol wrong type for socket 
Socket error 10042 - Bad protocol option 
Socket error 10043 - Protocol not supported 
Socket error 10044 - Socket type not supported 
Socket error 10045 - Operation not supported 
Socket error 10046 - Protocol family not supported 
Socket error 10047 - Address family not supported by protocol family 
Socket error 10048 - Address already in use 
Socket error 10049 - Cannot assign requested address 
Socket error 10050 - Network is down 
Socket error 10051 - Network is unreachable 
Socket error 10052 - Network dropped connection on reset 
Socket error 10053 - Software caused connection abort 
Socket error 10054 - Connection reset by peer 
Socket error 10055 - No buffer space available 
Socket error 10056 - Socket is already connected 
Socket error 10057 - Socket is not connected 
Socket error 10058 - Cannot send after socket shutdown 
Socket error 10060 - Connection timed out 
Socket error 10061 - Connection refused 
Socket error 10064 - Host is down 
Socket error 10065 - No route to host 
Socket error 10067 - Too many processes 
Socket error 10091 - Network subsystem is unavailable 
Socket error 10092 - WINSOCK.DLL version out of range 
Socket error 10093 - Successful WSAStartup not yet performed 
Socket error 10094 - Graceful shutdown in progress 
Socket error 11001 - Host not found 
Socket error 11002 - Non-authoritative host not found 
Socket error 11003 - This is a non-recoverable error 
Socket error 11004 - Valid name, no data record of requested type

WSAEADDRINUSE (10048) Address already in use 
WSAECONNABORTED (10053) Software caused connection abort 
WSAECONNREFUSED (10061) Connection refused 
WSAECONNRESET (10054) Connection reset by peer 
WSAEDESTADDRREQ (10039) Destination address required 
WSAEHOSTUNREACH (10065) No route to host 
WSAEMFILE (10024) Too many open files 
WSAENETDOWN (10050) Network is down 
WSAENETRESET (10052) Network dropped connection 
WSAENOBUFS (10055) No buffer space available 
WSAENETUNREACH (10051) Network is unreachable 
WSAETIMEDOUT (10060) Connection timed out 
WSAHOST_NOT_FOUND (11001) Host not found 
WSASYSNOTREADY (10091) Network sub-system is unavailable 
WSANOTINITIALISED (10093) WSAStartup() not performed 
WSANO_DATA (11004) Valid name, no data of that type 
WSANO_RECOVERY (11003) Non-recoverable query error 
WSATRY_AGAIN (11002) Non-authoritative host found 
WSAVERNOTSUPPORTED (10092) Wrong WinSock DLL version

 

此外,還會出現的問題,是“Project ftp01.exe raised exception class EIdConnClosedGracefully with message‘Connection Closed Gracefully.‘.Process stopped.Use Step or Run continue.”  這是由伺服器端發起的斷開請求。此問題是因為網路未識別其協議導致的,它其實就是一個類似VCL的異常處理,可以在編譯產生exe後消除。可以避免的方法是:在CB tools 選項中Debugger Options -> Language Exceptions添加一個條例(EIdSilentException) 

C++ Builder平台使用Indy9開發自動FTP程式01

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.