tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
12
ZUGRIFFE
795
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Prengepower Prengepower ist offline Mitglied Silber
    Registriert seit
    Aug 2003
    Beiträge
    78
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    
    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
     

  2. #2
    Avatar von DosCoder
    DosCoder DosCoder ist offline Mitglied Gold
    Registriert seit
    Sep 2008
    Ort
    Kreis Würzburg(Bayern)
    Beiträge
    228
    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...ocket_chat.pdf(Achtung PDF-File)
    Ciao
    DosCoder
     
    Man kann mich für das verantwortlich machen, was ich hier schreibe, nicht für das, was andere verstehen.

    Sollte ich mal Mist labern weist mich bitte darauf hin.

    Ich freue mich über ein Danke, wenn ich helfen konnte!

  3. #3
    Prengepower Prengepower ist offline Mitglied Silber
    Registriert seit
    Aug 2003
    Beiträge
    78
    Zitat Zitat von DosCoder Beitrag anzeigen
    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...ocket_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
     

  4. #4
    Avatar von DosCoder
    DosCoder DosCoder ist offline Mitglied Gold
    Registriert seit
    Sep 2008
    Ort
    Kreis Würzburg(Bayern)
    Beiträge
    228
    Hi,
    und was funktioniert am obigen Programm nicht?
    Ciao
     
    Man kann mich für das verantwortlich machen, was ich hier schreibe, nicht für das, was andere verstehen.

    Sollte ich mal Mist labern weist mich bitte darauf hin.

    Ich freue mich über ein Danke, wenn ich helfen konnte!

  5. #5
    Prengepower Prengepower ist offline Mitglied Silber
    Registriert seit
    Aug 2003
    Beiträge
    78
    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
     

  6. #6
    Avatar von DosCoder
    DosCoder DosCoder ist offline Mitglied Gold
    Registriert seit
    Sep 2008
    Ort
    Kreis Würzburg(Bayern)
    Beiträge
    228
    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
     
    Man kann mich für das verantwortlich machen, was ich hier schreibe, nicht für das, was andere verstehen.

    Sollte ich mal Mist labern weist mich bitte darauf hin.

    Ich freue mich über ein Danke, wenn ich helfen konnte!

  7. #7
    Prengepower Prengepower ist offline Mitglied Silber
    Registriert seit
    Aug 2003
    Beiträge
    78
    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
     

  8. #8
    Avatar von DosCoder
    DosCoder DosCoder ist offline Mitglied Gold
    Registriert seit
    Sep 2008
    Ort
    Kreis Würzburg(Bayern)
    Beiträge
    228
    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-g...345-jchat.html
    Einfach durchlesen und bei konkreten Unklarheiten fragen.

    Ciao
    DosCoder
     
    Man kann mich für das verantwortlich machen, was ich hier schreibe, nicht für das, was andere verstehen.

    Sollte ich mal Mist labern weist mich bitte darauf hin.

    Ich freue mich über ein Danke, wenn ich helfen konnte!

  9. #9
    Prengepower Prengepower ist offline Mitglied Silber
    Registriert seit
    Aug 2003
    Beiträge
    78
    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
     

  10. #10
    Avatar von DosCoder
    DosCoder DosCoder ist offline Mitglied Gold
    Registriert seit
    Sep 2008
    Ort
    Kreis Würzburg(Bayern)
    Beiträge
    228
    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
     
    Man kann mich für das verantwortlich machen, was ich hier schreibe, nicht für das, was andere verstehen.

    Sollte ich mal Mist labern weist mich bitte darauf hin.

    Ich freue mich über ein Danke, wenn ich helfen konnte!

  11. #11
    Prengepower Prengepower ist offline Mitglied Silber
    Registriert seit
    Aug 2003
    Beiträge
    78
    Zitat Zitat von DosCoder Beitrag anzeigen
    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
    Okay... Ich bräuchte für jeden anderen Client einen extra Thread?! Also sobald sich ein Client verbindet muss für den nen neuer Thread gestartet werden O.o

    Ja ich weiß, dass ich für nen Chat kein RMI benötige, aber der Chat ist nur ein Teilprogramm von meinem richtigen Programm. Dabei handelt es sich nämlich um einen Multiusereditor. Leider hatte mein Thema hier im Forum dafür nicht soviel anklang... Hier mal der Link, dass du dir das vll durchlesen kannst: Multiusereditor

    Vielen Dank schonmal
     

  12. #12
    Avatar von DosCoder
    DosCoder DosCoder ist offline Mitglied Gold
    Registriert seit
    Sep 2008
    Ort
    Kreis Würzburg(Bayern)
    Beiträge
    228
    Hi
    soweit sind deine Überlegungen korrekt, aber einen kleinen Fehler habe ich noch gefunden (vllt. hast du das schon gelöst?): Wenn einer auf "Host" klickt, soll ja der server gestartet werden, damit andere sich anmelden können. Woher wissen die anderen User aber, unter welcher IP? Die ändert sich ja ständig.

    Zu deinem Masterproblem: Ich finde auch, dass für den Anfang die 1. Variante nimmst, also dass in so einem Fall der Server entscheidet.

    Aber RMI brauchst du immer noch [b]unbedingt|/b]. Die Frage ist, ob du dich damit befassen willst, oder um das Programm schnell fertig werden soll. Für Letzteres kannst du die Daten, die du verschicken willst (Zeichen+Postion+...) einfach in String zusammen fassen; der Server schickt sie unangetastet weiter und die anderen Klienten spliten den String dann wieder. Wie gesagt, ist deine Entscheidung, wie viel Zeit du da reinstecken willst ...

    Ciao
    DosCoder
     
    Man kann mich für das verantwortlich machen, was ich hier schreibe, nicht für das, was andere verstehen.

    Sollte ich mal Mist labern weist mich bitte darauf hin.

    Ich freue mich über ein Danke, wenn ich helfen konnte!

  13. #13
    Prengepower Prengepower ist offline Mitglied Silber
    Registriert seit
    Aug 2003
    Beiträge
    78
    also ich hab mich jetzt so ansich schon ein wenig mit RMI befasst... Meinst du wirklich, dass RMI soviel länger dauert? Ich wollte das ganze Spielchen diese Woche eigentlich fertig kriegen - wenigstens den Chat!

    Das mit der IP wollte ich so lösen, dass in einem Fenster der Hoster seine IP + Port angezeigt bekommt und dann muss er per Telefon etc. den anderen die IP zuschicken... Wüsste nicht wie es anders gehen soll...

    Mfg
     

Ähnliche Themen

  1. Lautsprecher selbst bauen
    Von thelighter2 im Forum Audiotechnik, Recording & Audio-Software
    Antworten: 7
    Letzter Beitrag: 07.11.09, 00:42
  2. Chat bauen (Projekt for School)
    Von Ultimate272 im Forum Visual Basic 6.0
    Antworten: 3
    Letzter Beitrag: 16.02.09, 07:43
  3. WM-Planer selbst bauen?!
    Von Abwesend im Forum PHP
    Antworten: 5
    Letzter Beitrag: 06.06.06, 20:53
  4. Chat selber bauen, welche Möglichkeiten gibt es?
    Von FP4Lisa im Forum Coders Talk
    Antworten: 16
    Letzter Beitrag: 09.05.05, 02:00
  5. Notebook selbst bauen
    Von fluessig im Forum Hardware
    Antworten: 3
    Letzter Beitrag: 09.05.03, 14:30