FTPClient - how für die Verwendung von active-Modus
Machte ich eine kleine Anwendung, sollte der upload von Dateien auf einen FTP-server. Die Sache ist, dass ich verwendet den passiven Modus mit der Methode
enterLocalPassiveMode()
Kürzlich wurde mir gesagt, dass keine passiv-Modus erlaubt ist auf dem FTP-server, so sollte ich meine Anwendung im aktiven Modus. Ich nehme an, es könnte nicht getan werden, einfach durch ändern der Methode zum
enterLocalActiveMode()
Was sollte ich sonst noch ändern in der Anwendung, um sicherzustellen, dass es arbeitet im aktiven Modus.
Hier ist ein Codeausschnitt, der die Verbindung zu dem server:
public void connect() throws FTPException {
try {
ftpClient.connect(server, port);
replyCode = ftpClient.getReplyCode();
if (!FTPReply.isPositiveCompletion(replyCode)) {
printText("FTP server refused connection.");
throw new FTPException("FTP server refused connection.");
}
boolean logged = ftpClient.login(user, pass);
if (!logged) {
ftpClient.disconnect();
printText("Could not login to the server.");
throw new FTPException("Could not login to the server.");
}
ftpClient.enterLocalPassiveMode();
} catch (IOException ex) {
printText("I/O errortest: " + ex.getMessage());
throw new FTPException("I/O error: " + ex.getMessage());
}
}
Einige Hinweise, auf was muß ich ändern??
Läuft die übertragung erfolgt zwischen zwei remote-Servern? Haben Sie diese
Ja, die Maschinen (client und server) aus der Ferne verbunden über das Internet - Sie sind nicht im selben Netzwerk.
Dieses versuchen Sie dann
warum die Mühe machen, rethrow FTPException in jedem Fall von IOException? vielen Dank im Voraus
FTPClient.enterRemoteActiveMode(java.net.InetAddress, int)
?Ja, die Maschinen (client und server) aus der Ferne verbunden über das Internet - Sie sind nicht im selben Netzwerk.
Dieses versuchen Sie dann
ftpclient.enterRemoteActiveMode(REMOTE_IP,PORT)
bevor Sie Sie anschließen.warum die Mühe machen, rethrow FTPException in jedem Fall von IOException? vielen Dank im Voraus
InformationsquelleAutor plamenbv | 2014-01-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieser ist alt, aber ich stolperte auf es zu versuchen zu lösen das Problem selbst.
Zu nennen enterLocalPassiveMode() nach dem Aufruf von connect() und vor loging().
Siehe mein Beispiel unten, die initialisiert die FTPClient in lokalen passiven Modus listet die Dateien für ein bestimmtes Verzeichnis, dann schließt die verbindungen.
InformationsquelleAutor Cole Pram
http://commons.apache.org/proper/commons-net/apidocs/org/apache/commons/net/ftp/FTPClient.html#enterLocalActiveMode()
Nicht sicher, ob dies der FTPClient, die Sie verwenden, aber es scheint, dass enterLocalActiveMode ist, existiert tatsächlich.
InformationsquelleAutor Zach Thacker
FTPClient
Dokumentation besagt, dasspublic boolean enterRemoteActiveMode(InetAddress host,int port)
throws IOException
Hoffe, das hilft!
enterLocalPassiveMode()
ich verwenden sollenterRemoteActiveMode(InetAddress host, int port)
. Diehost
argument, das ich glaube, ist die Adresse des Servers, die ich hochladen. Aber was ist der port? Sollte es mit port 21 oder 20?Ja, absolut! Es ist standardmäßig port 21. Aber, check it out, wenn Ihr FTP-server ist so konfiguriert, laufen in jedem anderen Hafen
Ich konnte nicht warten, bis der FTP-server eingeschaltet sein, so dass ich schnell aus einer
vsftpd
server auf der mu-Linux-Maschine zu geben versuchen. Naja, die Datei wurde nicht erfolgreich hochgeladen. Es war einfach auf dem server erstellt und war leer. Ich verwendete die Methode, die der folgenden Weise:boolean foo = enterRemoteActiveMode(InetAddress.getByName("XX.XX.XX.XX"), 21)
. Irgendeine Idee?P. S. ich aktiviert aktiv-Modus des vsftpd mit
pasv_enable=NO
.Also, ich verstehe, dass die Datei angelegt wird, aber leer -
0 bytes
. Dann, überprüfen Sie, ob keine Schreibrechte oder Konfiguration in der vsftpd, der deaktiviert SchreibvorgangInformationsquelleAutor Keerthivasan