Wie empfange ich eine ftp liste?

Status
Nicht offen für weitere Antworten.

mr.deaht

Mitglied
Code:
public class Connect implements Runnable{
    Socket socket;
    BufferedReader in;
    PrintStream out;
    public Connect() {
        try{
        socket = new Socket("ftp.myftp.de",21);
        in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        out=new PrintStream(socket.getOutputStream());
        Thread s=new Thread(this);
        s.setPriority(Thread.MIN_PRIORITY);
        s.start();
        out.println("USER anonymous");
        out.println("PASS [email]anonym@anonym.de[/email]");
        out.println("SYST");
        out.println("PWD");
        out.println("PASV");
        out.println("LIST");
    } catch (UnknownHostException ex) {System.out.println("Host:"+ex);
    } catch (IOException ex) {System.out.println("s:"+ex);
    }
    }
    public static void main(String[] args) {
        Connect connect = new Connect();
    }

    public void run() {
        while(true){
        try {
            System.out.println(in.readLine());
        } catch (IOException ex) {
        }
        }
    }
}

Der Befehl um die server liste zu bekommen dürfte doch eigendlich stimmen leider wird aber keine liste versendet. Was mach ich falsch?? Die verbindung zum ftp wird ohne probleme aufgebaut.
 

mr.deaht

Mitglied
es soll ja kein ftp-server sein. Ich will ein ftp-client schreiben. Der obere teil zum einloggen funktioniert. Nun möchte ich aber eine liste bekomme auf dem die dateien des ftp's angezeigt werden.
 

KISS

Bekanntes Mitglied
auch der client arbeitet ueber einen tcp command stream und einen udp data stream. du wirst also nicht umhinkommen die die rfcs durchzulesen.
die liste bekommst du wahrscheinlich nicht weil der server afair keinen zeilenumbruch mitschickt
 

mr.deaht

Mitglied
Ist doch egal ob er zeienumbrüche macht oder nicht.
Wie kann ich jetzt aber diese lieste überhaupt empfangen??
Hat da einer eine idee?
Ich habe das mit dem passiv modus nicht so verstanden was macht der??
 

Bleiglanz

Gesperrter Benutzer
könnte dran liegen dass ftp einen zweiten socket für den datenverkehr benutzen möchte

=> nimm lieber eine fertige library
 

8ull23y3

Bekanntes Mitglied
Da muss ich Bleiglanz beipflichten schon wenn du in deinen Stream den Befehl benutzt um in den Passive Mode zu wechseln kommste nicht weiter da kommt garkein LIST beim Server an ich habs letzens selbst probiert. Du erhälst einen neuen Port (steht dann im Response) das ist der Port für die Datenübertragung soviel ich weiss ;)
Schau dir mal die Commonss-Net von Jarkarta an!
 

aquanox

Mitglied
Ich hab mal einen funktionierenden FTP Server geschrieben.

FTP benutzt, gegen den meisten Infos in den Köpfen, zwei Ports.
1. Port ist als Standard 21. Über diesen Port werden die Komandos abgehandelt, also z.B. dein LIST.
2. Port ist als Standard auf dem Server Nr 20. Alle Daten, wie Dateien oder auch die Liste wird über diesen zweiten Datenport geschickt. Für jede Datenaktion wird eine neue Datenverbindung hergestellt, somit ist es möglich Dateien hoch/runterzuladen und gleichzeitig auf dem Komandoport eventuelle Fehler abzuhandeln.

Was passiert also:

PASV sagt dem Server: Ich möchte die nächste Datenverbindung über Pasiv abhandeln. Der Server antwortet dir mit sechs Zahlen mit Komma getrennt. Im Prinzip ist das die IP und der Port auf dem Server, den dir dieser für die nächste Datenverbindung zur Verfügung stellt. Für jede Datenverbindung wird außerdem ein neuer Port beantragt.

LIST sagt dem Server: Schicke mir die Liste des aktuellen Verzeichnisses und zwar über den Datenport. Bei Pasiv bedeutet das, dass der Client einen zweiten Socket öffnet um sich mit den übergebenen Daten des Servers zu verbinden. Der Server kann dann das Zeug schicken und anschließen wird die Datenverbindung wieder geschlossen und man kann von vorne anfangen.

Dazu gibts noch den Aktiv Mode. Dabei schickt der Client über den Befehl PORT und den sechs Kommagetrennten Werten seine Daten dem Server zu, öffnet den Port und wartet dass der Server sich verbindet.

Im Groben wars das, bei weiteren Fragen bitte Melden.
 

mr.deaht

Mitglied
@AlArenal
Die Bibliothek ist mir zu unübersichtlich ich finde da den passenden Code nicht

@aquanox
kannst du mir sagen wie ich die liste vom ftp abrufe oder was an meinem quellcode falsch ist.
Code:
e import java.net.*;
import java.io.*;
import java.util.*;
public class FTPConnect implements Runnable{
	BufferedReader in;
	PrintStream out;
	Socket socket;
	Thread th = new Thread(this);
	FTPConnect(){
		verwalten();
	}

	public static void main(String[] args) {
     FTPConnect connect = new FTPConnect();
	}
   public void verwalten(){
	   try {
	            socket = new Socket("ftp.suse.de",21);
	            in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
	            out=new PrintStream(socket.getOutputStream());
	            th.setPriority(Thread.MIN_PRIORITY);
	            th.start();
	            out.println("USER anonymous");
	            out.println("PASS anonym@anonym.de");
	            out.println("SYST");
	            out.println("PWD");
	            out.println("PASV");
	} catch (UnknownHostException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
  }
  
   public void run() {
	   String s;
   
	   while(true){
	   try {
		 s=in.readLine();
		 StringTokenizer st = new StringTokenizer(s);
		 if(st.nextToken().matches("227")==true){
			s=s.substring(s.indexOf("("+1),s.indexOf(")"));
			int i=0;
			for(int a=0;a<4;a++){
				i=s.indexOf(",",i+1);
			}
			String ip=s.substring(0,i);
			ip=ip.replaceAll(",",".");
			int zahl1=Integer.parseInt(s.substring(i+1,s.indexOf(",",i+1)));
			int zahl2=Integer.parseInt(s.substring(s.indexOf(",",i+1)+1,s.length()));
			zahl1=zahl1*256+zahl2;
			List list= new List(ip,zahl1);
		 }
		System.out.println(s);
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} 
	   }
   }

}
class List implements Runnable{
	   Socket socket1;
	   BufferedReader in1;
	   PrintStream out1;
	public List(String ip, int port){
	       try {
	   		socket1 = new Socket(ip,port);
	          in1 = new BufferedReader(new InputStreamReader(socket1.getInputStream()));
	          out1 =new PrintStream(socket1.getOutputStream());
	          Thread th = new Thread(this);
	          th.setPriority(Thread.MIN_PRIORITY);
	          th.start();
	          out1.println("NLST");
	      	} catch (UnknownHostException e) {
	   		// TODO Auto-generated catch block
	   		e.printStackTrace();
	   	} catch (IOException e) {
	   		// TODO Auto-generated catch block
	   		e.printStackTrace();
	   	}
	}
	public void run() {
		// TODO Auto-generated method stub
		String s;
		while(true){
			try {
				s=in1.readLine();
				System.out.println("-----"+s);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}

In Zeile 74 wird immer die IOException ausgeführt. Was ist an diesem Code falsch?? Eine socket verbindung wird aber aufgebaut über den neuen Port. Ich bekomme aber kein InputStream. Kannst du mir helfe??
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Objekt über Object-Stream, empfange "alte" Daten Netzwerkprogrammierung 2
K Java RMI bricht ab wenn Remote eine Methode ausgeführt werden soll Netzwerkprogrammierung 5
D path-Variablen in eine URL hinzufügen mit Java 1.8 Netzwerkprogrammierung 2
T Webserviceaufruf verursacht eine Exception Netzwerkprogrammierung 3
B Codierung bei der Anbindung an eine REST API Netzwerkprogrammierung 3
L Socket Wie kann ich checken ob ein User eine Nachricht per Outputstream an den Server gesendet hat? Netzwerkprogrammierung 1
X Mit Java eine Applikation auf einem anderen Windows Rechner (Windows Server 2008) starten Netzwerkprogrammierung 1
H Socket Java | Server sendet Nachricht nur wenn vorher eine JOptionPane-Nachricht ausgegeben wurde. Netzwerkprogrammierung 2
P Eine etwas andere Frage: Sicherheit Netzwerkprogrammierung 5
I Server schickt eine Nachricht an Broadcast Netzwerkprogrammierung 2
M Server nur für eine Aufgabe Netzwerkprogrammierung 2
L ActiveMq - wie kann ich eine Queue löschen? Netzwerkprogrammierung 2
N über Java in eine Text-Datei auf einem Server schreiben Netzwerkprogrammierung 2
C ObjectInputReader wirft beim zweiten Aufruf eine Exception Netzwerkprogrammierung 3
N Problem über http eine Datei zu senden Netzwerkprogrammierung 4
N eine klasse mit server & client Netzwerkprogrammierung 5
X Über eine Socket-Verbindung Arrays übergeben Netzwerkprogrammierung 5
H Eine Mac-Adresse übers Internet ermitteln Netzwerkprogrammierung 2
V Alle Ip-Adressen eine Lokalen-Netzwerkes erfragen Netzwerkprogrammierung 9
B Zugriff auf eine Text- und XML-Datei Netzwerkprogrammierung 4
T Tomcat zeigt immer nur eine Seite Netzwerkprogrammierung 3
Q Problem bei Vergleichen von Strings übertragen über eine Socketverbindung Netzwerkprogrammierung 3
E Wie erstelle ich eine blockiernde Funktion? Netzwerkprogrammierung 12
G binden auf eine bstimmte IP und Netzwerkinterface Netzwerkprogrammierung 12
G Warum eine java.net.ConnectException? Netzwerkprogrammierung 7
P eine BufferedReader für alles ankommende Netzwerkprogrammierung 2
M Wie läd man eine HTML Seite in Java runter Netzwerkprogrammierung 2
A Anmeldung an eine Active Directory? Netzwerkprogrammierung 5
T Möglichkeit über das Netzwerk eine Funktion zu starten? Netzwerkprogrammierung 2
F String in eine URL umwandeln Netzwerkprogrammierung 7
S GEHT DAS? - Nur eine Frage! (Printer Port direkt ansteuern?) Netzwerkprogrammierung 4
R auf RemotPC eine Applikation starten Netzwerkprogrammierung 10
D Zwei Applikationen eine Liste? Netzwerkprogrammierung 2
X mehrere Request über eine HttpURLConnection Netzwerkprogrammierung 2
B Socket Liste von clients - multicast Netzwerkprogrammierung 4
D Netzwerk-To-Do-Liste Netzwerkprogrammierung 5
M anpingen, liste aller IPs im netzwerk erhalten Netzwerkprogrammierung 5

Ähnliche Java Themen

Neue Themen


Oben