Chat selbst bauen

Prengepower

Mitglied
Hallo!

Ich würde gerne einen Chat in Java bauen. Hab mich schon doll auf google usw. umgesehen aber bin leider nicht so wirklich schlau draus geworden.

Das ganze soll folgendermaßen aufgebaut sein:
Im Programm gibt es die Schaltfläche "hosten" und "verbinden". Wenn der User Hosten betätigt wird ein server im programm gestartet. Die anderen Clients können sich dann nach Eingabe von IP und Port zu dem Server verbinden (Schaltfläche "verbinden")... Im Programm habe ich dann einen Tree wo alle angemeldeten User angezeigt werden. Die Nachrichten sollen dann immer von einem User an alle verschickt werden. Also es findet keine "geschlossene" Kommunikation unter einzelnen Usern statt...

Könntet ihr mir bitte helfen wie ich das umsetzen kann... Weiß nicht so wirklich wie.. Hatte jetzt soweit gedacht, dass der Server beim Hosten in einem Thread gestartet wird. Das habe ich auch hinbekommen, allerdings weiß ich jetzt nicht genau wie ich das mit dem Tree und dem Nachrichtenaustausch anstellen soll...

Hatte das jetzt als klasse server angedacht:
Code:
package de.hwrberlin.jemm.net;

import java.net.*;
import java.util.Vector;
import java.io.*;

public class server implements Runnable {
	static final String  ANMELDUNG ="ANMELDUNG";
	static final String  ENDE      ="ENDE";
	static int port    = 1234;
	static int length  = 256; 

    public void run() {
    	DatagramPacket paket = new DatagramPacket( new byte[length], length);
    	Vector clients = new Vector();

        try {
   	        DatagramSocket socket = new DatagramSocket(port);
   	        for( ;; ) {
   	        	   socket.receive( paket );
    	           InetSocketAddress add = (InetSocketAddress)paket.getSocketAddress();

    	           String text = new String(paket.getData(), 0, paket.getLength());
    	           System.out.println( add +">" + text);

    	           if( text.equals( ANMELDUNG ) ) {
    	              clients.add( add );
    	              System.out.println( "Anzahl Clients: " + clients.size() );
    	           }  else if( text.equals( ENDE ) ){
    	              clients.remove( add );
    	              System.out.println( "Anzahl Clients: " + clients.size() );
    	           }  else {
    	              for( int i=0; i<clients.size(); i++ ) {
    	                InetSocketAddress dest = (InetSocketAddress) clients.get(i);
    	                if( ! dest.equals( add ) ) {
    	                   paket.setSocketAddress( dest );
    	                   socket.send( paket );
    	                   System.out.println( "Kopie an " + dest );
    	                }
    	              }
    	           }
    	        }
    	      }
    	      catch( IOException e ) {
    	         System.err.println( "Ausnahmefehler: " + e );
    	      }
    	   }
}

PLZ help ;)
 
Hi,
bei Eingabe von "java chat tutorial" in Google kommt gleich unter den ersten fünf ein vollständiges Tutorial. Du kannst also nicht allen Ernstes behaupten, du hättest fleißig gesucht. Hier der Link zum Tutorial: http://www.cn-java.com/download/data/book/socket_chat.pdf(Achtung PDF-File)
Ciao
DosCoder

ja naja ich habe schon so einiges gefunden, aber nichts so wirklich womit meine fragen beantwortet waren, sonst würde ich hier ja kein thema dazu aufmachen ;)

mfg
 
ich habe halt keine ahnung wie ich weitermache wenn ich den server gestartet hab wenn ich auf verbinden klicke soll sich ja der client zum server verbinden beleibt der denn dauerhaft verbunden?! wie kann ich aus einem anderen fenster heraus nachrichten an den server verschicken und der verteilt se dann an die anderen clients?! Wie kann ich klassen verschicken?

mfg
 
Hi,
also dein Codebeispiel schaut mir viel zu kompliziert aus.
Der Server besteht aus nichts anderem ServerSocket, der darauf wartet, dass sich jemand anmeldet, und einem Thread, der auf eingehende Nachrichten wartet und sie an alle verschickt.
Der Server selbst braucht eigentlich keine grafische Benutzeroberfläche, da er ja eigenständig arbeitet.

Dein Klient besteht aus einem Socket, der sich mit dem Server verbindet, einem Thread, der Nachrichten verschickt (über den Outputstream des Sockets) und einen Thread, der Nachichten vom Server empfängt(über den Inputstram des Sockets). Ich weiß ja nicht, woher du den Codeschnippsel hast, aber InetSockets & Co brauchst du für einen einfachen Thread nicht.

Arbeite das Tutorial doch einfach mal durch, denn wie gesagt, dein Code erscheint mir viel zu kompliziert.

Ciao
DosCoder
 
okay...
naja der server soll halt nur ausm programm heraus gestartet werden aber so ansich nichts weiter anzeigen außer server gestartet und server beendet... aber das ist ja kein problem! gut das mit dem thread erscheint mir jetzt schon verständlicher...

also starte ich den server in einem thread und den client in einem thread... beim nachrichten verschicken wird wiederrum ein thread aus dem client aufgerufen der die nachricht verschickt... und es läuft die ganze zeit noch ein thread im hintergrund der darüber wacht das neue nachrichten kommen... hab ich das jetzt richtig verstanden?

mfg
 
Hi,
sorry für die späte Antwort, ich hatte früher keine Zeit...

Ich verstehe deine Aussage nicht: "der Server soll aus einem Programm gestartet werden?"

also starte ich den server in einem thread und den client in einem thread
Der Server und der Client sind zwei Programme, die fast immer auch auf verschiedenen PCs laufen. Der Server solte natürlich rund um die Uhr laufen, damit man sich immer Anmelden kann.
Mehr will ich aber nicht dazu sagen, da ich das ganze Thema schon mal durchgekaut habe:
http://www.tutorials.de/forum/java-grundlagen/338345-jchat.html
Einfach durchlesen und bei konkreten Unklarheiten fragen.

Ciao
DosCoder
 
also ich hatte das so angedacht, dass alle leute das programm auf ihrem rechner haben und einer klickt dann den button "hosten"... dadurch wird der server auf seinem rechner gestartet (dürfte ja als thread im programm reichen oder?) und die anderen können sich dann mit dessen IP + Port zu ihm verbinden... Er selbst verbindet sich auf seinem PC auch mit dem server...

passt des?

hab mich jetzt so ansich für RMI oder SIMON entschieden... Was genau weiß ich noch nicht? Ansich wäre ja SIMON besser, weil es übers Internet laufen soll und da macht sich SIMON ja besser ne?

mfg
 
Hi,
also theoretisch ginge das, du bräuchtest aber +2 Threads für deinen Server. 1, der neue Clients entgegen nimmt, und einer pro Client. (siehe anderer Chat-Thread). Einen einfachen Chat kann man auch mit Streams realisieren, dazu brauchst du kein RMI & C (siehe Tutorial).

Ciao
DosCoder
 

Neue Beiträge

Zurück