WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   Java: FTP-Client (http://www.wcm.at/forum/showthread.php?t=215026)

sesselhocker 02.05.2007 22:10

Java: FTP-Client
 
Hallo!

Habe folgenden Code:

boolean open(String host, String user, String pass) throws Exception
{
sock = new Socket(host, 21, null, 80);
in = new BufferedReader(new InputStreamReader(sock.getInputStream()));
out = new BufferedWriter(new OutputStreamWriter(sock.getOutputStream()));
System.out.println(in.readLine());
write("USER "+user);
System.out.println(in.readLine());
write("PASS "+pass);
System.out.println(in.readLine());

void write(String string) throws Exception
{
out.write(string+"\r\n");
out.flush();
}

Das Problem ist, dass ich nicht weiß, wie viele Zeilen ich am Beginn vom Server auslesen kann, ohne dass sich das Programm aufhängt. Ein Beispiel: Die Willkommensnachricht ist 3 Zeilen lang. Am Anfang wird die erste Zeile ausgegeben, nach dem Senden des Benutzernamens die 2. Zeile und nach dem Passwort die 3. Ich möchte aber auch auf die Messages vom Server reagieren können, beispielsweise um festzustellen, ob der Login erfolgreich war. Wie stelle ich also fest, ob ich noch etwas auslesen kann/darf/muss?

Vielen Dank schon mal,
mfg sesselhocker

pong 03.05.2007 06:27

Zitat:

ohne dass sich das Programm aufhängt.
Wieso sollte es sich aufhängen? Um solche Gschichtln zu umgehen, legt man einen Timeout fest

Zitat:

Wie stelle ich also fest, ob ich noch etwas auslesen kann/darf/muss?
ähem anhand der Responsecodes? http://www.ietf.org/rfc/rfc959.txt

pong

sesselhocker 03.05.2007 09:26

Hallo pong!

Danke für deine rasche Antwort!

Das Programm hängt sich deswegen auf, da bei System.out.println(in.readLine()); solange gewartet wird, bis ich eine Nachricht vom Server bekomme. Und ich möchte für das Programm nicht wirklich ein Timout festlegen, da ja sonst das ganze Programm unterbrochen wird, und nicht nur weiter abgearbeitet wird.

Natürlich reagiere ich anhand der Response-Codes, allerdings kann ich nur darauf reagieren, wennn ich die aktuellste (letzte) Responsenachricht vom Server habe. Die habe ich aber wieder nur, wenn ich weiß, wie oft ich den Servercache auslesen darf, weil, wenn ich zu oft auslese, das Programm hängen bleibt, wie gerade gesagt.

Ich brauche also eine Lösung, mit der ich weiß, wie oft ich noch mit readLine() auslesen darf. Ich könnte das natürlich umständlich über einen Thread lösen, aber das muss doch einfacher gehen oder?

mfg sesselhocker

Who-T 03.05.2007 12:14

AFAIK available() gibt dir die anzahl der verfuegbaren bytes bei einem InputStream. Wenns net ausreicht, kannst mittlerweile was anderes tun.

sesselhocker 08.05.2007 17:09

Hallo who-t!

Danke für deinen entscheidenden Tipp! Problem gelöst.

<closed>

mfg, sesselhocker


Alle Zeitangaben in WEZ +2. Es ist jetzt 03:38 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag