FTP是我們?nèi)粘=ㄕ局惺褂妙l率很高的一款軟件了,我們?cè)谑褂肍TP的時(shí)候經(jīng)常會(huì)遇到Socket ERROR,那么這種錯(cuò)誤我們應(yīng)該如何解決?
首先我們來(lái)了解一下FTP的兩種模式(主動(dòng)模式和被動(dòng)模式):
主動(dòng)模式:
FTP客戶端使用N(N>1023)端口連接到FTP服務(wù)器的21端口,發(fā)送用戶名和密碼登錄,登錄成功后要list列表或者讀取數(shù)據(jù)時(shí),客戶端開(kāi)放N+1端口,發(fā)送 PORT命令到FTP服務(wù)器,告訴服務(wù)器客戶端采用主動(dòng)模式并開(kāi)放端口;FTP服務(wù)器收到PORT主動(dòng)模式命令和端口號(hào)后,通過(guò)服務(wù)器的20端口和客戶端開(kāi)放的端口連接,發(fā)送數(shù)據(jù).
被動(dòng)模式:
FTP客戶端使用N(N>1023)連接FTP服務(wù)器的21端口,發(fā)送用戶名和密碼登錄,登錄成功后要list列表或者讀取數(shù)據(jù)時(shí),發(fā)送PASV命令到FTP服務(wù)器, 服務(wù)器在本地開(kāi)放一個(gè)端口(1024以上),然后把開(kāi)放的端口告訴客戶端, 客戶端再通過(guò)N+1端口連接到服務(wù)器開(kāi)放的端口進(jìn)行數(shù)據(jù)傳輸
當(dāng)我們連接FTP時(shí),無(wú)法顯示目錄列表,這個(gè)時(shí)候又可能就是模式選擇的問(wèn)題,相同的軟件,版本不同,設(shè)置方法也略有不同,因此需要根據(jù)實(shí)際情況進(jìn)行設(shè)置。
區(qū)別對(duì)比
二者的區(qū)別主要在于建立數(shù)據(jù)傳輸連接的時(shí)候,主模式的連接發(fā)起方為服務(wù)器端,使用20號(hào)端口連接客戶端的N+1端口建立數(shù)據(jù)連接;被動(dòng)模式連接發(fā)起方為客戶端,客戶端使用端口號(hào)+1去連接服務(wù)器的某一高位端口;
網(wǎng)絡(luò)設(shè)置區(qū)別
主動(dòng)模式下,客戶端的FTP軟件設(shè)置主動(dòng)模式開(kāi)放的端口段,在客戶端的防火墻開(kāi)放對(duì)應(yīng)的端口段即可。
有一種常見(jiàn)問(wèn)題是:服務(wù)器端只開(kāi)放了21端口, 客戶端機(jī)器沒(méi)開(kāi)放任何端口。FTP客戶端連接采用的被動(dòng)模式,結(jié)果客戶端能登錄成功,但是無(wú)法LIST列表和讀取數(shù)據(jù)。很明顯,是因?yàn)榉?wù)器端沒(méi)開(kāi)放被動(dòng)模式下的隨機(jī)端口導(dǎo)致。
由于被動(dòng)模式下,服務(wù)器端開(kāi)放的端口隨機(jī),但是防火墻要不能全部開(kāi)放,解決的方案是,在ftp服務(wù)器配置被動(dòng)模式下開(kāi)放部分隨機(jī)高位端口(范圍在ftp服務(wù)器軟件設(shè)置,可以設(shè)置任意1024上的端口段),然后在防火墻設(shè)置規(guī)則,開(kāi)放服務(wù)器端相應(yīng)的端口號(hào)即可。
我們專注高端建站,小程序開(kāi)發(fā)、軟件系統(tǒng)定制開(kāi)發(fā)、BUG修復(fù)、物聯(lián)網(wǎng)開(kāi)發(fā)、各類API接口對(duì)接開(kāi)發(fā)等。十余年開(kāi)發(fā)經(jīng)驗(yàn),每一個(gè)項(xiàng)目承諾做到滿意為止,多一次對(duì)比,一定讓您多一份收獲!