Hallo,
ich sitze nun schon den halben Tag an folgedem Problem:
Ich habe ein kleines Tool geschrieben um Daten auf einen FTP-Server zu laden und auch abrufen zu können. Das klappt soweit ganz gut. Allerdings kann ich die Dateien nur einmal abrufen, beim 2. mal kommt immer ein Fehler:
Die Methode list();
Das Datei hochladen klappt auch prima, aber sobald ich die Methode list() einmal aufgerufen habe bricht dabei die Verbindung zusammen. Kommentiere ich jedoch den Methodenaufruf von list() aus, geht das Fehlerfrei.
Ich hoffe mir kann einer den entscheidenen Tip geben.
Gruß tobi
ich sitze nun schon den halben Tag an folgedem Problem:
Ich habe ein kleines Tool geschrieben um Daten auf einen FTP-Server zu laden und auch abrufen zu können. Das klappt soweit ganz gut. Allerdings kann ich die Dateien nur einmal abrufen, beim 2. mal kommt immer ein Fehler:
Java:
< 220 FTP on *********server.com ready
> USER f00441c4
< 331 Password required for f00441c4
> PASS Dz4oMQ**********
< 230 User f00441c4 logged in
> TYPE I
< 200 Type set to I
// Methode list() wird aufgerufen beim Programmstart
> PASV
< 227 Entering Passive Mode (85,13,143,176,195,107).
> LIST
// Aktualisierung, erneuter Aufruf von list()
> PASV
< 150 Opening BINARY mode data connection for file list
> LIST
port out of range:-1
Die Methode list();
Java:
public ArrayList<String> list() throws IOException{
sendLine("PASV");
String response = readLine();
String ip = null;
int port = -1;
int opening = response.indexOf('(');
int closing = response.indexOf(')', opening + 1);
if(closing > 0){
String dataLink = response.substring(opening + 1, closing);
StringTokenizer tokenizer = new StringTokenizer(dataLink, ",");
ip = tokenizer.nextToken() + "." + tokenizer.nextToken() + "." + tokenizer.nextToken() + "." + tokenizer.nextToken();
port = Integer.parseInt(tokenizer.nextToken()) * 256 + Integer.parseInt(tokenizer.nextToken());
}
sendLine("LIST");
Socket sock = new Socket(ip, port);
BufferedReader bin = new BufferedReader(new InputStreamReader(sock.getInputStream()));
ArrayList<String> files = new ArrayList<String>();
String s;
while((s = bin.readLine()) != null){
String[] teile = s.split(" ");
if(teile[0].startsWith("d")){
if(!teile[teile.length - 1].startsWith("."))
files.add("|" + teile[teile.length - 1]);
}else{
files.add(teile[teile.length - 1]);
}
}
bin.close();
return files;
}
Das Datei hochladen klappt auch prima, aber sobald ich die Methode list() einmal aufgerufen habe bricht dabei die Verbindung zusammen. Kommentiere ich jedoch den Methodenaufruf von list() aus, geht das Fehlerfrei.
Ich hoffe mir kann einer den entscheidenen Tip geben.
Gruß tobi
Zuletzt bearbeitet: