要儘量簡短自定義FTP客戶端PASV數據連接被拒絕
我已經使用c#.net 3.5編寫了自定義FTP實現。系統使用TcpClient(主動模式的TcpListener)來管理連接。在單個實例中獲得了奇怪的行爲,我想問一下可能的原因。
客戶本身在內部工作很好,我們的客戶很大一部分都滿意。但是,我們有一個我無法弄清楚的問題。我已經發送wireshark的痕跡,但沒有真正的喜悅。客戶端機器落後於我認爲(從客戶描述)成爲大型網絡基礎架構。從網絡外部,到同一臺服務器的連接就像一個魅力。這是我所看到的。
在我的客戶端工作在被動模式下,tcp握手請求將發送出去以進行數據連接(服務器進入被動模式並指定端口),但從未被確認。這會導致重試和最終超時。
使用Filezilla(以及Windows資源管理器和IE ...)客戶端,再次使用被動模式時,連接不會發生問題。令人煩惱的是,這導致客戶和我的老闆指責代碼。
通過wireshark跟蹤我看不到任何TCP幀之間的差異。所有控制連接都擊中端口21,並在兩種情況下都得到確認。標誌是相似的。同樣的情況適用於數據連接,除非它是一個高數字端口52000+(但是在我的蹤跡中不同)。
當我們開始進入較低級別的協議問題並且我對大型網絡警告的理解非常有限時,我並不是網絡編程的專家。作爲開發人員,我立即喊出「防火牆問題」,但這並不能爲任何人解決任何問題。
要最終確定,是否有人知道會導致這種行爲的硬件/防火牆?我懷疑在應用程序級別阻止了流量,但您永遠不知道。
感謝您的閱讀。
這引出了一個問題:爲什麼你自己的FTP實現已經有很多了? –
一個很好的問題,2個原因。第1位:作爲一般規則,部門對第三方庫感到不滿(微軟的FtpWebRequest是垃圾)。第二:我們希望靈活地將代理支持納入客戶反饋。 – Gusdor