Java-Chat Beispiel

Status
Für weitere Antworten geschlossen.

{P!RM!N}

Cadet 1st Year
Registriert
Apr. 2005
Beiträge
8
Ich bin auf der Suche nach einem Java-Chat. Weiss jemand wo man einen Java-Chat mit Code findet. Brauchen ein Beispiel für die Schule!

Gruss
 
Hallo,

wenn es schon eine Hausaufgabe ist, kann doch ein paar Sekunden googlen auch nicht schaden, oder? ;)
Schau einmal was Google alles schönes ausspuckt: *klick* ;)
Darunter zum Beispiel dieser.

MfG mh1001
 
Zuletzt bearbeitet:
Code:
//code by DigitalD
import java.net.*;
import java.io.*;
import java.util.*;
//import javagently.*;

public class CServer {

     boolean ok = true;
     int port = 23;
     public static int clientNR = 0;

     CServer() {
          try {
               ServerSocket listener = new ServerSocket(port);
               System.out.println("ServerSocket auf Port 23");
               System.out.println("Socket horcht nach Clients...");
               //Erstellt ein Socket auf Port 23
               while(ok) { //Client-Sammel-Stelle
                    Socket socket = listener.accept();
                    //Erstellt ein Socket, der darauf wartet das ein Client
                    //versucht sich mit dem Server zu verbinden
                    new ClientHandler(socket).start();
                    //jeder Client der sich verbindet wird in einem eigenen Thread verwaltet
                    System.out.println("a Client logged in");
               }
          } catch (IOException A) {
               System.err.println(A.toString()+" problem mit Socket");
               System.out.println("Socket wurde geschlossen");
               System.exit(1);
               //bei fehlern --> EXIT
          }
     }
     public static void main(String [] args) {
          new CServer();
     }
}    /* END OF CLASS SERVER */

/* FÜR JEDEN CLIENT WIRD EIN THREAD VERWENDET */
class ClientHandler extends Thread {
     //für jeden Client wird ein eigener Thread gestartet
     static LinkedList clientList = new LinkedList();
     //LinkedList erstellt eine Verkettete Liste
     private Socket socket;
     private int clientID;
     private BufferedReader fromClient;
     private PrintWriter toClient;
     private String nic, chat;
     
     ClientHandler (Socket S) {
          this.socket = S;
          this.clientID = CServer.clientNR;
          ClientHandler.clientList.add(socket);
          CServer.clientNR ++;
     }

     public void run() {
          try {//Server-Client-Start-Sequenz
               fromClient = new BufferedReader(new InputStreamReader(socket.getInputStream()));
               toClient = new PrintWriter(socket.getOutputStream(),true);
               toClient.println("Willkommen auf Alex´s Chat-Server (u r client nr:"+clientID+")");
               toClient.println("gib CU ein um den Chat zu verlassen");
               toClient.println("Bitte geben Sie einen Nic-Name ein:");
               nic = fromClient.readLine();
               int check = nic.compareTo(" ");
               System.out.println(check);
               if ( (check < 1) | (nic == null) ) {
                    toClient.println("SIE MÜSSEN EIN NIC-NAME EINGEBEN!!!!!!");
                    toClient.println("PROBIERS NOCHMAL !!!!!");
                    nic = fromClient.readLine();
               }
               check = nic.compareTo(" ");
               System.out.println(check);
               if ( (check < 1) | (nic == null) ) { try {
                    System.out.println(nic+" wurde gekickt, weil er zu blöd is ein nic einzugeben!!!lol");

                    ClientHandler.remove(this.socket, nic);
                    } catch (IOException D) {System.out.println(D.toString()+" line 74");}}
               toClient.println("SERVERBOT: HALLO "+nic+", viel spass beim Chatten");
               System.out.println(nic+" hat den Chat betreten");
               broadcast(nic+" hat den Chat betreten", "SERVERBOT");
          } catch (IOException B) { System.err.println(B.toString()+" line 78"); }
          
          //Chat-Sequenz
          while (true) {
               try {
               chat = fromClient.readLine();
               int check = chat.compareTo(" ");
               System.out.println(check);
               if (chat.equals("CU")) break;
               if ( (check < 1) | (chat == null) ) {
                    do {
                         chat = fromClient.readLine();
                         check = chat.compareTo(" ");
                         if (chat == null) break;
                         System.out.println(check+" line 92");
                    }while( (check < 1) | (chat == null) );
               }
               } catch (Exception C) {System.out.println(C.toString()+" line 95"); break;}
               try {
               if (chat == null) break;
               broadcast(chat, nic);
               System.out.println(nic+": "+chat);
               } catch (IOException E) {System.out.println(E.toString()+" line 100");}
          }
          try {
               ClientHandler.remove(this.socket, nic);
          } catch (IOException D) {System.out.println(D.toString()+" line 104");}
     }
     
     synchronized static void broadcast (String msgAll, String from) throws IOException {
          Socket bc;
          PrintWriter pw;
          
          for (ListIterator list = clientList.listIterator(); list.hasNext();) {
               bc = (Socket) list.next();
               pw = new PrintWriter(bc.getOutputStream(), true);
               pw.println(from+": "+msgAll);
          }
     }
     
     synchronized static void remove (Socket cl, String nic) throws IOException {
          broadcast(nic+" hat den Chat verlassen!!","SERVERBOT");
          try { Thread.sleep(1000); } catch (InterruptedException X) {System.out.println(X.toString()+" line 120");}
          ClientHandler.clientList.remove(cl);
          cl.close();
          System.out.println(nic+" hat den Chat verlassen!!");
     }
}

code by DigitalD all rights reserved!

das ist nur der chat-server... die quellen für den client find ich net mehr... funzt aber auch mit telnet auf port 23... hoffe damit kann ich dir ein bischen helfen
zu der logik:
ein eignener thread horcht auf port 23 ob sich ein client einloggen will... loggt sich ein client ein wird für diesen ein neuer thread gestartet in dem der client sozusagen verwaltet wird... schreibt der client eine nachricht, wird diese an den server übertragen und von dort an alle eingeloggten clients "broad-ge-castet"
 
Zuletzt bearbeitet:
Das ist hier kein Hausaufgaben-Board, wo direkt die Lösung geliefert wird. Hättest du einen Ansatz gehabt, wäre es ok, aber einfach so zu fragen ist nicht drin. ;)

@DigitalD
Diese Faulheit hätte ich nicht unterstützt. ;)
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben