2011-06-22 50 views
0

我們正在努力在Filezilla Client和Filezilla Server之間進行通信,在它們之間有兩個代理。在兩個代理之間,我們有2個tcp連接。如何讓插座保持活動狀態

filezilla客戶端 - > P1 - 2 ----- P2 - > filezilla服務器。

我們正在得到的問題是上傳filezilla客戶端將發送整個數據到P1和P1發送數據到P2。但是P2 recv。速度不如P1發送速度快。 P1將在一段時間後關閉連接,但由於P2仍在嘗試從P1接收數據,因此無法接收,並且會失敗。

有沒有什麼辦法讓soket活着直到另一端完全收回數據?

  1. 我已經嘗試使用不同超時選項的靈兒。但它沒有處理所有情況。

  2. 我已經嘗試設置套接字選項keepalive,但仍然存在相同的問題。

任何人都可以請幫助或建議我一些東西嗎?

+1

這是不應該的。 FTP基於一對TCP連接。 TCP內置了流量控制機制 - 端點將調整其窗口大小以防止鏈路的任何部分過載。只要代理正在交換一些數據,套接字就不應該被丟棄。爲什麼P1的客戶端子系統關閉套接字?它產生了什麼錯誤/狀態消息/日誌? –

+0

P1有兩個套接字,例如上傳一個帶有filezilla客戶端(sock1)的套接字和一個套接字以將數據發送到P2(套接字2)。一旦它完成發送數據到P2比關閉sock1和sock2這兩個套接字,結果P1和P2之間的通信信道中斷導致文件傳輸失敗。 – Nidhi

回答

1

當P2接收到連接從另一端關閉的信息時,它應該從套接字讀取其餘的字節,然後再關閉連接。

+0

P2將只讀取剩餘的數據直到套接字超時。例如,如果我們給了5秒暫停時間,P2將讀取數據直到5秒,然後它關閉連接,..它不會讀取P1發送的全部數據。 – Nidhi

+0

@Nidhi,禁用自動連接由系統執行關機(逗留)。在沒有更多數據需要讀取時,在代碼中關閉。 – Dialecticus

+0

我怎麼可以確保在P2級別我們已經消耗了P1發送的所有數據,如果我保持套接字在P1級別打開,並且我試圖在P2級別獲取整個數據,數據在P2級別,但套接字在P1級別保持打開狀態,導致無法在filezilla中檢索目錄列表本身(即,我無法連接到filezilla服務器本身)。 – Nidhi

0

感謝所有您在此線程的貢獻,問題已經使用關機功能解決了....

問候 尼迪