N
nicht so wichtig
Gast
Halloa,
ein kurzer Abschnitt meines Problem.
Ich habe eine Client-Server-Verbindung. Der Server funktioniert einwandfrei, letztlich geht es um den Client.
Der Client kann nichts besonderes, er schickt irgendwelche Daten, die vom Benutzer eingegeben werden, an den Server und empfängt zwischendurch auch was.
Das Problem ist, dass nicht bekannt ist, WANN der Server etwas sendet.
Damit das Programm nicht blockiert ist, habe ich die Abfrage vom Server in einem separaten Thread gepackt:
Der Hauptteil wird in der while-Schleife abgearbeitet. Es wird auf Daten vom Server gewartet, die dann anschließend ohne Umwege nach System.out geschrieben werden sollen.
Das Problem liegt wohl darin, dass es mit System.out im Thread eben Probleme gibt. Immer, wenn der Server etwas sendet, wird dies nicht direkt ausgegeben, sondern erst, wenn das Programm beendet wird. Ist die Nachricht hingegen ein String der mit \n endet, wird der Text direkt ausgegeben.
Irgendwie verwirrt mich das. Entweder wird alles direkt ausgegeben oder alles erst ganz zum Schluss. Es ist aber eher eine Mischung. Weiß jemand warum und kann mir helfen, das Problem so zu gestalten, dass empfangener Text sofort auf der Standardausgabe (Konsole) ausgegeben wird?
ein kurzer Abschnitt meines Problem.
Ich habe eine Client-Server-Verbindung. Der Server funktioniert einwandfrei, letztlich geht es um den Client.
Der Client kann nichts besonderes, er schickt irgendwelche Daten, die vom Benutzer eingegeben werden, an den Server und empfängt zwischendurch auch was.
Das Problem ist, dass nicht bekannt ist, WANN der Server etwas sendet.
Damit das Programm nicht blockiert ist, habe ich die Abfrage vom Server in einem separaten Thread gepackt:
Code:
public void startRead() {
Thread t = new Thread(new Runnable() {
public void run() {
boolean closed = false;
char[] cbuf = new char[1024];
while (!closed) {
try {
// in_ ist ein BufferedReader
int c = in_.read(cbuf, 0, 1024);
if (c != -1) {
System.out.print(new String(cbuf, 0, c));
System.out.flush();
}
}
catch (IOException ex) {
// Connection closed
closed = true;
}
}
System.exit(0);
}
});
t.start();
}
// In Main:
ConnectionClass c = new ConnectionClass();
c.connect(...);
c.startRead();
input = bufrdr.readLine();
.
.
.
Das Problem liegt wohl darin, dass es mit System.out im Thread eben Probleme gibt. Immer, wenn der Server etwas sendet, wird dies nicht direkt ausgegeben, sondern erst, wenn das Programm beendet wird. Ist die Nachricht hingegen ein String der mit \n endet, wird der Text direkt ausgegeben.
Irgendwie verwirrt mich das. Entweder wird alles direkt ausgegeben oder alles erst ganz zum Schluss. Es ist aber eher eine Mischung. Weiß jemand warum und kann mir helfen, das Problem so zu gestalten, dass empfangener Text sofort auf der Standardausgabe (Konsole) ausgegeben wird?