ERLEDIGT
JA
JA
ANTWORTEN
12
12
ZUGRIFFE
640
640
EMPFEHLEN
-
Hallo!
Ich downloade/uploade per ftp Bilder von einem FTP-Server.
Ich verwende hierfür: org.apache.commons.net.ftp.FTPClient
Aber an der Stelle(bei listFiles):
Code :1 2 3 4
if (ftpClient.isConnected()) { serverFiles = ftpClient.listFiles(SERVER_DIR); }
kommt folgende Exception:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
java.net.SocketTimeoutException: connect timed out at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method) at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:75) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:337) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:198) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:180) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:157) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391) at java.net.Socket.connect(Socket.java:579) at org.apache.commons.net.ftp.FTPClient._openDataConnection_(FTPClient.java:726) at org.apache.commons.net.ftp.FTPClient.initiateListParsing(FTPClient.java:2990) at org.apache.commons.net.ftp.FTPClient.initiateListParsing(FTPClient.java:2965) at org.apache.commons.net.ftp.FTPClient.listFiles(FTPClient.java:2623) at xxx.xxx.objects.Ftp$UpdateTask.doInBackground(Ftp.java:292) at xxx.xxx.objects.Ftp$UpdateTask.doInBackground(Ftp.java:1) at org.jdesktop.swingworker.SwingWorker$1.call(Unknown Source) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) at java.util.concurrent.FutureTask.run(FutureTask.java:166) at org.jdesktop.swingworker.SwingWorker.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) at java.lang.Thread.run(Thread.java:722)
Es tritt nicht immer auf, nur manchmal.
An was kann das liegen?
Im Verzeichnis was ich mir holen möchte liegen ca 5 Bilder mit jeweils 10KB.
Also die Größe kann es nicht sein.
Bitte um Hilfe
-
28.11.11 19:24 #2
- Registriert seit
- Jun 2009
- Beiträge
- 870
Wie schnell ist deine Verbindung zu dem Server (ping, SpeedTest)? Ist der Server vielleicht überlastet? Wan öffnest du die Verbindung? Vielleicht kann der Server die Verbindung nicht halten, d.h. wenn du ein Verzeichnis auflistest, ein bisschen wartest und dann noch mal ein Verzeichnis wartest, könnte die Wartezeit dazwischen das Problem sein.
Code bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.Code java:1
System.out.println("Hallo");
___________
Ubuntu Bug #1: Microsoft has a majority market share
Casecon: Projekt leiser Käse
-
Ich hab mit Ping:
Ping wird ausgeführt für xxx.xxx.xxx[xx.xx.xx.xxx] mit 32 Bytes Daten:
Antwort von xx.xx.xx.xxx: Bytes=32 Zeit=45ms TTL=54
Antwort von xx.xx.xx.xxx: Bytes=32 Zeit=46ms TTL=54
Antwort von xx.xx.xx.xxx: Bytes=32 Zeit=44ms TTL=54
Antwort von xx.xx.xx.xxx: Bytes=32 Zeit=45ms TTL=54
Ping-Statistik für xx.xx.xx.xxx:
Pakete: Gesendet = 4, Empfangen = 4, Verloren = 0
(0% Verlust),
Ca. Zeitangaben in Millisek.:
Minimum = 44ms, Maximum = 46ms, Mittelwert = 45ms
Der Server ist glaub ich nicht überlastet. Ist ein privater bei meinem Schwager.
Aber wie könnte ich überprüfen ob er überlastet ist?
Die Verbindung öffne ich 2 Zeilen vorher:
Code :1 2 3 4
ftpClient.enterLocalPassiveMode(); ftpClient.setFileType(FTP.BINARY_FILE_TYPE); ftpClient.setConnectTimeout(20000); ftpClient.setDataTimeout(20000);
Ich öffne die Verbindung, hole mir das Verzeichnis vom Host und vergleiche es mit dem lokalen.
Dann werden gegebenfalls Bilder up bzw downgeloaded. Danach wird die Verbindung geschlossen.
Das ist der Update-Prozess der gleich beim Start des Programms gemacht wird.
-
29.11.11 08:49 #4
Hi,
ich habe hier ein sehr gutes Beispiel gefunden zum up- und downloaden von Dateien eines FTP-Servers.
Gruß
FabioBitte die Code-Tags verwenden. Bei Java-Code: [java]...[/java]
Tutorials:
Automatisches erzeugen eines Inhaltsverzeichnisses (Javascript)
JAnimationPanel - Animationen für Swing/AWT
SWTRatingBar (Bewertungs-Composite) selbst programmieren
____________________________________________________________________________
Über eine Bewertung (Stern links unter dem Beitrag) oder ein Danke freue ich mich sehr.
-
Genau so mache ich es
-
29.11.11 11:04 #6
Ich würde mal vermuten, dass das ein oder andere mal die Datei einfach zu groß ist und dementsprechend nicht in der Zeit (DataTimeout) heruntergeladen werden kann.
Das würde auch die nicht vorhandene Regelmäßigkeit erklären.
Geändert von Fabio Hellmann (29.11.11 um 13:09 Uhr)
Bitte die Code-Tags verwenden. Bei Java-Code: [java]...[/java]
Tutorials:
Automatisches erzeugen eines Inhaltsverzeichnisses (Javascript)
JAnimationPanel - Animationen für Swing/AWT
SWTRatingBar (Bewertungs-Composite) selbst programmieren
____________________________________________________________________________
Über eine Bewertung (Stern links unter dem Beitrag) oder ein Danke freue ich mich sehr.
-
Die Dateien sind alle nicht größer als 15KB. Und es sind momentan ca 5 Stück dort.
Also die Größe kann es glaub ich nicht sein.
-
29.11.11 13:10 #8
Könntest du deinen Code posten in dem du die FTP-Verbindung aufbaust, die Daten holst und die Verbindung wieder schließt?
Bitte die Code-Tags verwenden. Bei Java-Code: [java]...[/java]
Tutorials:
Automatisches erzeugen eines Inhaltsverzeichnisses (Javascript)
JAnimationPanel - Animationen für Swing/AWT
SWTRatingBar (Bewertungs-Composite) selbst programmieren
____________________________________________________________________________
Über eine Bewertung (Stern links unter dem Beitrag) oder ein Danke freue ich mich sehr.
-
Code java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
/** * Zum Server connecten * * @param server * @return */ private boolean connect() { ftpClient = new FTPClient(); try { int reply; ftpClient.connect(SERVER_URL); // After connection attempt, you should check the reply code to verify success. reply = ftpClient.getReplyCode(); if (!FTPReply.isPositiveCompletion(reply)) { ftpClient.disconnect(); ErrorDialog.show(new Exception("FTP server refused connection.")); } else { return true; } } catch (IOException e) { if (ftpClient.isConnected()) { try { ftpClient.disconnect(); } catch (IOException f) { // do nothing } } ErrorDialog.show(e); } return false; }
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
/** * Am Server anmelden * * @param username * @param password */ private void login() { try { if (!ftpClient.login(SERVER_USER, SERVER_PSW)) { ftpClient.logout(); ErrorDialog.show(new Exception("Username/Password falsch!")); } else { ftpClient.enterLocalPassiveMode(); ftpClient.setFileType(FTP.BINARY_FILE_TYPE); ftpClient.setConnectTimeout(20000); ftpClient.setDataTimeout(20000); } } catch (IOException e) { ErrorDialog.show(e); } }
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
/** * Task damit des Abgleichen der Dateien im Hintergrund passiert * * @author MaRk */ private class UpdateTask extends Task<Void,Void> implements FinishListener { private Queue<Task<Void, Void>> taskQueue; private FinishListener finishListener; public UpdateTask() { super(Application.getInstance()); taskQueue = new LinkedBlockingQueue<Task<Void, Void>>(); } public void addFinishListener(FinishListener finishListener) { this.finishListener = finishListener; } @Override protected Void doInBackground() throws Exception { try { FTPFile[] serverFiles; if (ftpClient.isConnected()) { serverFiles = ftpClient.listFiles(SERVER_DIR); } else { connect(); login(); serverFiles = ftpClient.listFiles(SERVER_DIR); } File[] hostFiles = new File(HOME_DIR).listFiles(); List<String> uploadList = new ArrayList<String>(); List<String> downloadList = new ArrayList<String>(); // Listen befüllen for (FTPFile file : serverFiles) { downloadList.add(file.getName()); } for (File file : hostFiles) { uploadList.add(file.getName()); } // Listen reduzieren um die schon vorhandenen Dateien for (FTPFile file : serverFiles) { if (uploadList.contains(file.getName())) { uploadList.remove(file.getName()); } } for (File file : hostFiles) { if (downloadList.contains(file.getName())) { downloadList.remove(file.getName()); } } // Upload's + Download's zur Queue hinzufügen for (String file : uploadList) { UploadTask uploadTask = new UploadTask(file); uploadTask.addFinishListener(this); taskQueue.add(uploadTask); } for (String file : downloadList) { DownloadTask downloadTask = new DownloadTask(file); downloadTask.addFinishListener(this); taskQueue.add(downloadTask); } // Queue starten finished(""); } catch (IOException e) { ErrorDialog.show(e); } return null; } @Override public void finished(String threadName) { Task<Void, Void> task; if( ( task = taskQueue.poll()) != null) { task.execute(); } else { if (finishListener != null) { finishListener.finished("update"); } } } /** * Gibt die Anzahl der Task's zurück welche noch in der Queue sind. * @return */ public int getQueueSize() { return taskQueue.size(); } }
Code java:1 2 3 4 5 6 7 8 9 10
/** * Überprüft beide Verzeichnise(local + server) und gleicht diese ab. */ public void update() { updateTask = new UpdateTask(); updateTask.addFinishListener(this); updateTask.execute(); updateFinished = false; }
Die letzte Methode (update()) wird am Programmstart ausgeführt. Im Konstruktor wird connect() + login() aufgerufen.
Der Fehler passiert bei:
Code java:1 2 3 4
if (ftpClient.isConnected()) { serverFiles = ftpClient.listFiles(SERVER_DIR); }
Geändert von hesk (29.11.11 um 13:26 Uhr)
-
Sonst noch jemand eine Idee
?
-
Hab jetzt das Programm verkleinert um zu überprüfen an was es liegt.
Das Programm rennt 4 mal durch, dann kommt ein "time out". Dann gehts wieder 3x, dann wieder "time out".
Der Server dürfte manchmal einfach nicht reagieren.
Hat jemand eine Ahnung was man da am Server ändern kann?
-
Hab mal bissal rum gelesen und denke das FTP keine so gute Idee zu Übertragung war.
Werde mal http://www.jcraft.com/jsch/ probieren. Das basiert auf ssh.
-
Mit jsch ging es problemlos.
Ähnliche Themen
-
FTPClient.freeze()
Von Unicate im Forum JavaAntworten: 0Letzter Beitrag: 27.08.09, 18:51 -
FTPClient mehrere Dateien klappt nicht so recht
Von Unicate im Forum JavaAntworten: 0Letzter Beitrag: 27.08.09, 15:15 -
FTPClient Up- und download
Von Steffen01 im Forum JavaAntworten: 2Letzter Beitrag: 18.09.08, 20:50 -
commons.net FTPClient TransferMode auf binary ändern
Von freeplayer im Forum JavaAntworten: 1Letzter Beitrag: 31.05.06, 14:02 -
Kein zugang zum FTPclient
Von patrickditter im Forum Hosting & WebserverAntworten: 2Letzter Beitrag: 18.08.04, 17:58





Zitieren
Login





