Socket Wie kann ich checken ob ein User eine Nachricht per Outputstream an den Server gesendet hat?

lgplay

Mitglied
Ich will ein Kleines Chat Programm schreiben wie finde ich herraus ob in den DataOutputstream eine neue nachricht einetippt wurde und dann "geflushed" wurde gibt es so etwas wie ein flush event
mein Bisheriger Code ist etwas Recourcen Lastig
Java:
try {
            while (true) {
                if (in.available() > 0) {
                    cmd = in.readUTF();

                    String args[] = {};

                    int counter = 0;
                    while (in.available() > 0) {
                        args[counter] = in.readUTF();
                        counter++;
                    }

                    for (MessageReceiveEvent event : EventManager.getMessageRecieveEvents())
                        event.onMessageReceive(cmd, args);
                }
            }
 
Wieso soll dieser Code Resourcen lastig sein?
Du kannst es im Grunde genommen nur herausfinden, indem du liest. Zumindest fällt mir gerade keine bessere Möglichkeit ein. Derzeit liest du ja quasi Zeilenweise ein, bis nichts mehr kommt. Klingt erstmal gut, hat aber einen Hacken:
Wenn die Verbindung nicht die schnellste ist und du genug sendest, wird in.available() im Worst Case immer true ergeben --> dein Programm könnte sich an dieser Stelle aufhängen / in einer Endlosschleife landen und event.onMessageReceive() würde nie ausgeführt. Das Problem ist zwar erstmal theoretischer Natur, sollte aber nicht vernachlässigt werden. Denn ich vermute, dass du auf der Client / Server Seite kein sleep() o.ä. hast, was dafür sorgt, dass erstmal fertig geschrieben wurde.

Falls du ernsthaft nur einen Chat Server machen willst, würde ich dir raten das ganze gar nicht von Hand, sondern mit der Library vertx.io zu bewerkstelligen. Ich habe dazu mal ein Tutorial geschrieben, welches vermutlich genau deinen Use Case abdeckt:

Dazu gibt es übrigens auch schon einige Threads.
 

Zurück
Oben