2009-09-11 47 views
1

我們正在通過我們的應用程序進行FTP連接,這是一個JAVA應用程序。 在調用FTPClient.connect()方法之前,我們使用Socket.connect(Adreess,timeout)方法設置了連接超時。Socket.connect(Adreess,timeout)和FTPClient.setSoTimeOu之間的區別

在同一連接下從FTP站點獲取文件期間,我們還沒有設置任何超時。是否必須調用方法FTPClient.setSoTimeOut(timeout)方法來爲同一連接下的每個此類交互設置單獨超時或Socket.connect(Adreess,timeout)方法將爲在一個連接下與FTP站點的每次交互設置超時?

我也想知道這兩種方法有什麼區別?

+0

這是來自Apache Commons Net的FTPClient,我是否假設? – skaffman 2009-09-11 10:13:08

回答

2

Socket.connect()中的超時時間是連接超時,這是等待TCP握手完成的時間。這個超時只發生在每個連接一次。

setSoTimeout()被稱爲套接字讀取超時,這是您等待從套接字讀取待處理字節的等待時間。這發生在整個TCP會話讀取的每個套接字上。

設置兩個超時值是一個很好的做法,因此您不依賴系統默認值,這可能會有所不同。但是,當通話停留在本地代碼中時,超時可能無法正常工作。例如,如果防火牆以靜默方式丟棄數據包,則連接超時不受尊重。