FTP Client mit Sockets - wann sagt der Server nichts mehr?

Flu

Mitglied
Moin Leute.
Ich möchte einen FTP Client auf Socketbasis erstellen.
Das funktioniert so weit auch ganz gut, anmelden an den Server ist kein Problem.
Mein Client besteht zur Zeit aus 2 Klassen, die parallel gestartet werden.
Einmal der ClientKlasse, die die Befehle an den Server schickt, und einer Konsolenklasse, die immer horchen soll, ob der Server was sagt und es dann per println in die Konsole schreiben.
So weit so gut, das funktioniert alles.

Allerdings soll jetzt der Client wissen, wann nichts mehr in die Konsole geschrieben wird, dann 20sec warten und ein NOOP abschicken, und dann wieder warten bis die Konsole sagt, dass sie nichts neues mehr hat.

Mein Problem: Woher weiß ich, wann nichts neues mehr kommt? Die Konsole gibt brav alle Servermeldungen aus und dann nichts mehr.
Allerdings kann ich das "Nichts" nicht abfangen.
Es ist weder "", noch null.
Auch ein isEmpty() ergibt immer false, obwohl nichts mehr kommt?!

Java:
import java.io.IOException;


public class Konsole extends Thread {
	
	Client client;
	
	public Konsole(Client client) {
		this.client = client;
	}
	
	public void run() {
		
	while(true) {
		
		
		try {
			String line = client.fromServer.readLine();
			
			if(!line.isEmpty() ) {
				System.out.println(line);
			}
			else {
				System.out.println("Leer");
			}
			
			
		} catch (IOException e) {}
		
	}
	
			
					
			
	}
}
 
das liegt daran dass readLine() blockiert, bis die nächste eingabe vom server kommt.
D.h. entweder die Verbindung wird unterbrochen oder er wartet potentiell unendlich.

Das ist aber auch durchaus gewünscht würde ich sagen.
Was ist denn das problem daran?
 
Vom Server kommt ein TimeOut nach XY Sekunden, wenn kein neuer Befehl kommt.
Daher soll alle YX Sekunden ein NOOP gesendet werden
 
Die Strings sind eigentlich nur dafür da, die Kommandos zu übermitteln, der Datentransfer soll dann über StreamReader / Writer erfolgen
 
Wollte nur sichergehen, dass Dir das bewusst ist. Ich würde die Kommandos allerdings ebenfalls per Byte/Datenstrom übertragen, dann hätte man eine "einheitliche" Kommunikation, die vermutlich auch einfacher zu implementieren ist.
 

Zurück
Oben