溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

FTPClient上傳文件大小為0問(wèn)題

發(fā)布時(shí)間:2020-10-03 18:40:03 來(lái)源:網(wǎng)絡(luò) 閱讀:544 作者:ywb_4185 欄目:編程語(yǔ)言

FTP支持兩種模式,一種方式叫做Standard主動(dòng)方式,缺省時(shí)默認(rèn)的方式,一種是 Passive 被動(dòng)方式。?

下面介紹一個(gè)這兩種方式的工作原理:

  • 主動(dòng)模式:第一步FTP客戶(hù)端首先隨機(jī)選擇一個(gè)大于1024的端口p1,并通過(guò)此端口發(fā)送請(qǐng)求連接到FTP服務(wù)器的21號(hào)端口建立TCP連接,在FTP中這個(gè)連接叫做控制連接,連接成功建立后,F(xiàn)TP客戶(hù)端會(huì)發(fā)送port命令,緊接著FTP客戶(hù)端會(huì)監(jiān)視自己的p1+1端口,F(xiàn)TP服務(wù)器接收到port命令會(huì)從自己的20號(hào)端口向FTP客戶(hù)端的p1+1端口發(fā)起請(qǐng)求建立TCP連接,這個(gè)連接叫做數(shù)據(jù)連接,用來(lái)發(fā)送數(shù)據(jù),數(shù)據(jù)傳輸完畢后數(shù)據(jù)連接隨即關(guān)閉,控制連接保持開(kāi)啟。

  • 被動(dòng)模式:在建立控制連接的時(shí)候和主動(dòng)模式類(lèi)似,但建立連接后發(fā)送的不是Port命令,而是Pasv命令。FTP服務(wù)器收到Pasv命令后,隨機(jī)打開(kāi)一個(gè)臨時(shí)端口(也叫自由端口,端口號(hào)大于1023小于65535)并且通知客戶(hù)端在這個(gè)端口上傳送數(shù)據(jù)的請(qǐng)求,F(xiàn)TP客戶(hù)端發(fā)送請(qǐng)求連接FTP服務(wù)器此端口,成功建立連接后FTP服務(wù)器將通過(guò)這個(gè)端口進(jìn)行數(shù)據(jù)的傳送數(shù)據(jù)傳輸完畢后數(shù)據(jù)連接隨即關(guān)閉,控制連接保持開(kāi)啟。

因?yàn)楹芏喾阑饓υ谠O(shè)置的時(shí)候都是不允許接受外部發(fā)起的連接的,所以許多位于防火墻后或內(nèi)網(wǎng)后的FTP客戶(hù)端不支持主動(dòng)模式,因?yàn)榉?wù)器無(wú)法穿過(guò)防火墻或者無(wú)法連接到NAT后的客戶(hù)端。

至此,找到了原因:我是用的本機(jī)上開(kāi)啟了防火墻,F(xiàn)TP服務(wù)器請(qǐng)求本機(jī)的端口被隔離阻止。

  • 解決方案:將ftp模式修改為Passive模式。加上如下代碼即可解決上傳文件大小為0的問(wèn)題
ftp.enterLocalPassiveMode();
向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI