FTP中的收获
在這幾天編寫FTP服務器端和客戶端程序時,總是遇到這樣那樣的錯誤和困難,現在已經解決大部分,幾點收獲記錄如下:
1. 明白了主動模式和被動模式的根本區別:
主動模式:服務器向客戶端敲門,然后客戶端開門;
被動模式:客戶端向服務器敲門,然后服務器開門。
2. Socket的Send方法是非阻塞的;
3. ASCII傳輸模式和Binary傳輸模式,對于ASCII傳輸模式,傳輸的數據大小不大時,還是很方便的,但是用于傳輸大量數據,如大文件時,接收方處理并不容易。
在我的設計中,只有使用Binary模式才能保證每次傳輸都是正確。特別是使用了Socket的SendFile方法,這是一個阻塞方法,只要數據未發送完,都會被阻塞直到發送完畢。系統會自動處理緩沖等問題,非常方便;屬于Binary模式的。
4. 明白了一種協議標準的必要性。
5. 學會了許多FTP命令。
6. 基本掌握了Socket的工作原理和編程方式。
7. 進一步理解了多線程編程。
8. FTP是File Transfer Protocol(文件傳輸協議)的縮寫,用來在兩臺計算機之間互相傳送文件。相比于HTTP,FTP協議要復雜得多。復雜的原因,是因為FTP協議要用到兩個TCP連接,一個是命令鏈路,用來在FTP客戶端與服務器之間傳遞命令;另一個是數據鏈路,用來上傳或下載數據。
(1)用于傳送命令的兩個Socket,它們在整個過程中都是連接著的;
(2)用于傳送數據的兩個Socket,只在有數據傳送時才建立連接,數據傳送完后,則斷開連接。
(3)還有兩個Socket用于監聽,采用主動模式時,ClientListener處于監聽狀態;采用被動模式時,ServerListener處于監聽狀態。
暫時就這么多了,晚了,要睡了。。。。zzzzzzzzzzzzzzzzzzzz
參考資料:
1. 主動FTP vs. 被動FTP 權威解釋
2. ftp應答碼
3. FTP wiki
4. 了解FTP服務與FTP協議(圖)
5. 一個FTP類
6. 一個FTP客戶端的C#代碼??? 2
7. FTP協議的分析和擴展
8. FTP命令詳解
9. http://www.faqs.org/rfcs/rfc959.html? RFC 959 (RFC959)?? 中文版
10. FTP---文件傳輸協議
其它資源:
ftp協議簇
http://www.ietf.org/rfc/rfc959.txt
http://www.ietf.org/rfc/rfc1579.txt
ftp安全擴展
http://www.ietf.org/rfc/rfc2228.txt
http://www.ietf.org/rfc/rfc2246.txt
ftp安全擴展,SSL接口草案:
http://www.ietf.org/internet-drafts/draft-murray-auth-ftp-ssl-13.txt
ssl/tls協議規范:
http://www.ietf.org/rfc/rfc2246.txt
OpenSSL,一個廣為應用的SSL實現:
http://www.openssl.org
支持ssl ftp的ftp client:
http://www.ford-hutchinson.com/~fh-1-pfh/ftps-ext_col.html#client
支持ssl ftp的ftp server:
http://www.ford-hutchinson.com/~fh-1-pfh/ftps-ext_col.html#server
1. 明白了主動模式和被動模式的根本區別:
主動模式:服務器向客戶端敲門,然后客戶端開門;
被動模式:客戶端向服務器敲門,然后服務器開門。
2. Socket的Send方法是非阻塞的;
3. ASCII傳輸模式和Binary傳輸模式,對于ASCII傳輸模式,傳輸的數據大小不大時,還是很方便的,但是用于傳輸大量數據,如大文件時,接收方處理并不容易。
在我的設計中,只有使用Binary模式才能保證每次傳輸都是正確。特別是使用了Socket的SendFile方法,這是一個阻塞方法,只要數據未發送完,都會被阻塞直到發送完畢。系統會自動處理緩沖等問題,非常方便;屬于Binary模式的。
4. 明白了一種協議標準的必要性。
5. 學會了許多FTP命令。
6. 基本掌握了Socket的工作原理和編程方式。
7. 進一步理解了多線程編程。
8. FTP是File Transfer Protocol(文件傳輸協議)的縮寫,用來在兩臺計算機之間互相傳送文件。相比于HTTP,FTP協議要復雜得多。復雜的原因,是因為FTP協議要用到兩個TCP連接,一個是命令鏈路,用來在FTP客戶端與服務器之間傳遞命令;另一個是數據鏈路,用來上傳或下載數據。
(1)用于傳送命令的兩個Socket,它們在整個過程中都是連接著的;
(2)用于傳送數據的兩個Socket,只在有數據傳送時才建立連接,數據傳送完后,則斷開連接。
(3)還有兩個Socket用于監聽,采用主動模式時,ClientListener處于監聽狀態;采用被動模式時,ServerListener處于監聽狀態。
暫時就這么多了,晚了,要睡了。。。。zzzzzzzzzzzzzzzzzzzz
參考資料:
1. 主動FTP vs. 被動FTP 權威解釋
2. ftp應答碼
3. FTP wiki
4. 了解FTP服務與FTP協議(圖)
5. 一個FTP類
6. 一個FTP客戶端的C#代碼??? 2
7. FTP協議的分析和擴展
8. FTP命令詳解
9. http://www.faqs.org/rfcs/rfc959.html? RFC 959 (RFC959)?? 中文版
10. FTP---文件傳輸協議
其它資源:
ftp協議簇
http://www.ietf.org/rfc/rfc959.txt
http://www.ietf.org/rfc/rfc1579.txt
ftp安全擴展
http://www.ietf.org/rfc/rfc2228.txt
http://www.ietf.org/rfc/rfc2246.txt
ftp安全擴展,SSL接口草案:
http://www.ietf.org/internet-drafts/draft-murray-auth-ftp-ssl-13.txt
ssl/tls協議規范:
http://www.ietf.org/rfc/rfc2246.txt
OpenSSL,一個廣為應用的SSL實現:
http://www.openssl.org
支持ssl ftp的ftp client:
http://www.ford-hutchinson.com/~fh-1-pfh/ftps-ext_col.html#client
支持ssl ftp的ftp server:
http://www.ford-hutchinson.com/~fh-1-pfh/ftps-ext_col.html#server
轉載于:https://www.cnblogs.com/fengmk2/archive/2007/01/17/622170.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結