# Problem: connection abbrechen und login erkennen



## Marfir (10. Nov 2005)

Hallo,

ich lerne gerade Java und bin jetzt beim Thema "Netzwerkprogrammierung" angelangt.

Ich habe ein Tool geschrieben, dass eine Verbindung zu einem FTP-Server aufnimmt und dort eine Datei abholen soll. Dabei tritt das Problem auf, dass ich nicht weis, ob ich eingelogt bin. Also ob jetzt der richtige Zeitpunkt ist ein "get" zu senden. Der Login funzt aber soweit.


```
...
while ((str=bb.readLine()) != null)
            {
                status.setText(status.getText() + str + "\n");
                
                if (str.indexOf("220 Welcome to Code-Crafters Ability FTP Server.") != -1)
                {
                    out.println("USER Marfir");
                }
                if (str.indexOf("331 Please send PASS now.") != -1)
                {
                    out.println("PASS edv");
                }
                if (str.indexOf("You are currently") != -1)
                {
                    //out.println("get LIEFER.DAT");
                    out.println("ls");
                    
                }          
                if (str.indexOf("550 Bad command.") != -1)
                {
                    out.println("bye");
                    s.close();
                    return;
                }
            }
            s.close();
```

Die if-Abfrage "230 You are currently in directory "/". geht nicht korrekt (oder das ls ?), egal wie ich es ausdrücke.
Dabei ist es die letzte Meldung nach dem Login (die der ftp-server sendet). Demnach müsste der Zeitpunkt richtig sein, aber da kommt dann nur "Bad command" zurück.
Wenn ich es manuell über die cmd versuche kommt nach ls/dir das richtige ergebnis zurück. Also muss irgend wie die IF-Abfrage nicht stimmen.


2. Problem:

Wie kann ich meine while-Schleife abbrechen? Ich habe auf der Form ein abbrechen-button, kann es aber nicht anklicken. Denn sobald der in der while-schleife ist friert die form (JFrame) ein. Es kommen nur noch ausgaben ins TextArea (status).


Thx!


----------



## Mag1c (10. Nov 2005)

Hi,

schau dir mal das RFC 959 zum FTP-Protokoll an. Bei den Antworten vom Server solltest du dich darauf beschränken, die Codes auszuwerten. Welcher Text dahinter kommt, ist jedem Server selbst überlassen.

Den Login-Zustand mußt du selbst überwachen. Dabei gibt es mehrere Zustände: "nicht angemeldet", "USER gesendet", "PASS gesendet", "angemeldet". So kannst du aus aktuellem Status und Result-Code einen neuen Status berechnen. (z.B. "PASS gesendet" + Result 200 -> "angemeldet")

Pack den ganzen Kommunikationskram in einen Thread, dann bleibt deine GUI intakt und du kannst auch mit dem Button arbeiten.

Und das Kommando zum Verzeichnis auflisten ist "LIST" und nicht ls oder dir oder so.

Gruß
Mag1c


----------



## Marfir (10. Nov 2005)

Danke!
Hat soweit alles geklapt.


[Zitat]
schau dir mal das RFC 959 zum FTP-Protokoll an. Bei den Antworten vom Server solltest du dich darauf beschränken, die Codes auszuwerten. Welcher Text dahinter kommt, ist jedem Server selbst überlassen.
[/zitat]

Danke für den Tipp. Aber ich hab vergessen zu erwähnen, dass ich mich mit nur einem best. FTP verbinden will und somit den Text auswerten kann.


----------

