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);
                }
            }
 

JuKu

Top Contributor
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.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
V erste Client - Server Anwendung, paar Fragen wie Socketverbindung checken usw. Netzwerkprogrammierung 4
G Netzwerk Speed checken Netzwerkprogrammierung 3
T URLs checken Netzwerkprogrammierung 2
C imap/java emails checken ohne runterzuladen? Netzwerkprogrammierung 3
S Schnelles checken ob Bilddateien auf URL verfuegbar sind? Netzwerkprogrammierung 7
S User im Chatprogramm verschiedene Farben Netzwerkprogrammierung 1
R Ldaptemplate Add User to Group Netzwerkprogrammierung 9
TiME-SPLiNTER HTTP User Authentication: Java Client -> Webserver Netzwerkprogrammierung 7
A Multi-User-Chat Netzwerkprogrammierung 2
K SMB User auslesen Netzwerkprogrammierung 3
K Java RMI bricht ab wenn Remote eine Methode ausgeführt werden soll Netzwerkprogrammierung 5
D path-Variablen in eine URL hinzufügen mit Java 1.8 Netzwerkprogrammierung 2
T Webserviceaufruf verursacht eine Exception Netzwerkprogrammierung 3
B Codierung bei der Anbindung an eine REST API Netzwerkprogrammierung 3
X Mit Java eine Applikation auf einem anderen Windows Rechner (Windows Server 2008) starten Netzwerkprogrammierung 1
H Socket Java | Server sendet Nachricht nur wenn vorher eine JOptionPane-Nachricht ausgegeben wurde. Netzwerkprogrammierung 2
P Eine etwas andere Frage: Sicherheit Netzwerkprogrammierung 5
I Server schickt eine Nachricht an Broadcast Netzwerkprogrammierung 2
M Server nur für eine Aufgabe Netzwerkprogrammierung 2
L ActiveMq - wie kann ich eine Queue löschen? Netzwerkprogrammierung 2
N über Java in eine Text-Datei auf einem Server schreiben Netzwerkprogrammierung 2
C ObjectInputReader wirft beim zweiten Aufruf eine Exception Netzwerkprogrammierung 3
N Problem über http eine Datei zu senden Netzwerkprogrammierung 4
N eine klasse mit server & client Netzwerkprogrammierung 5
X Über eine Socket-Verbindung Arrays übergeben Netzwerkprogrammierung 5
H Eine Mac-Adresse übers Internet ermitteln Netzwerkprogrammierung 2
V Alle Ip-Adressen eine Lokalen-Netzwerkes erfragen Netzwerkprogrammierung 9
B Zugriff auf eine Text- und XML-Datei Netzwerkprogrammierung 4
T Tomcat zeigt immer nur eine Seite Netzwerkprogrammierung 3
Q Problem bei Vergleichen von Strings übertragen über eine Socketverbindung Netzwerkprogrammierung 3
E Wie erstelle ich eine blockiernde Funktion? Netzwerkprogrammierung 12
G binden auf eine bstimmte IP und Netzwerkinterface Netzwerkprogrammierung 12
G Warum eine java.net.ConnectException? Netzwerkprogrammierung 7
P eine BufferedReader für alles ankommende Netzwerkprogrammierung 2
M Wie läd man eine HTML Seite in Java runter Netzwerkprogrammierung 2
A Anmeldung an eine Active Directory? Netzwerkprogrammierung 5
T Möglichkeit über das Netzwerk eine Funktion zu starten? Netzwerkprogrammierung 2
F String in eine URL umwandeln Netzwerkprogrammierung 7
M Wie empfange ich eine ftp liste? Netzwerkprogrammierung 12
S GEHT DAS? - Nur eine Frage! (Printer Port direkt ansteuern?) Netzwerkprogrammierung 4
R auf RemotPC eine Applikation starten Netzwerkprogrammierung 10
D Zwei Applikationen eine Liste? Netzwerkprogrammierung 2
X mehrere Request über eine HttpURLConnection Netzwerkprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben