Hallo liebes Forum,
ich bin schon seit einigen Jahren am Programmieren mit Java und wollte nun endlich mal in die Netzwerkprogrammierung eintauchen. Soweit, so gut. Ich hab mir auch das Buch von Guido Krüger und Thomas Stark gekauft - "Handbuch der Java Programmierung", was ich allgemein jedem ans Herz legen kann, wenn er es eh nicht schon hat.
Unter anderem wird da auch ein Echo-Server erklärt. Also X-Clients können auf einen Server verbinden, der ihnen dann jeweils ihre Eingabe zurück gibt. Auch das kein Ding für mich, habe ich auch verstanden.
Wo es jetzt bei mir aber hängt ist, wie mache ich aus dem Echo-Server einen Chat-Server, also dass alle Nachrichten an alle verbundenen Clients geschickt werden? Ich bekomm' da einfach die Logik nicht raus, wie ich mit den Streams und Threads arbeiten muss (Threads sind da auch relativ neu für mich, fragt nicht, mit was ich mich die ganzen anderen Jahre aufgehalten hab :schlaf: )
Das ist wohl auch ein viel gefragtes Thema im Netz, aber die bisherigen Posts, die ich gefunden habe, waren für mich eher unbefriedigend.
Ich liste mal kurz auf, wie es momentan bei mir ausschaut:
1. Der Server wird gestartet und wartet auf einen Client.
2. ServerSocket.accept() gibt mir den Socket des Clients aus, mit dem ich dann einen ClientThread starte. Er bekommt eine eigene Nummer und den Socket übergeben.
3. im Thread höre ich auf Eingaben des Clients, indem ich vom Socket den In- und OutputStream nehme. Bekomme ich nun was durch den InputStream rein, lese ich es aus und schreibe es direkt wieder in den OutputStream (das EchoPrinzip - und ich denke, hier müsste ich irgendwie ansetzen, es an alle Clients zu schicken!?)
Noch die Auflistung, wie es beim Client derzeit ausschaut:
1. Beim Start wird ein neuer Socket erzeugt, mit der Addresse "localhost" und dem Port
2. Ich nehme meinen In- und Outputstream vom Socket
3. Ich erzeuge einen AusgabeThread, mit meinem InputStream, der darauf wartet, dass ich etwas bekomme. Dies wird dann in der Konsole ausgegeben
4. Parallel dazu lese ich in einer Endlosschleife über die Konsole ein, was eingeben wird und schicke es mit dem OutputStream los.
5. Daraufhin folgt eine Methode, die ich aus dem Buch habe, nämlich, dass ich den AusgabeThread anspreche und die Methode yield() ausführe. Was genau ist deren Sinn?
Wenn mir jemand Gedankenanstöße geben kann, oder auch direkt sagt, wie es zu machen wäre, ist das ganz große Klasse!
Ich hoffe das war nicht zu viel Input und ich bedanke mich für jeden Kommentar
Vielen Dank.