Chat Fenster

Luka Kross

Neues Mitglied
Hallo,

ich bin gerade dabei ein einfachen Chat zu programmieren wo Clients miteinander kommunizieren sollen was über ein Server laufen soll (localhost).
Nun hab ich grad das Problem, dass wenn ich ein Client starte (chat-fenster öffnet sich) und den User name eingebe wird der zwar in einer J-list eingetragen in dem Fenster aber wenn ich noch ein Client starte (neues Fenster öffnet sich) wird der name von dem ersten Host nicht in der J-list vom zweiten Fenster angezeigt.
Was muss ich machen damit der Name auch im zweiten Fenster angezeigt wird ?

Java:
Meine Server Klasse:



import java.awt.*;

import java.io.*;

import java.net.*;

import java.util.*;

import javax.swing.*;







public class Server {



        ServerSocket server;

        ArrayList<PrintWriter> list_clientWriter;

    

        final int LEVEL_ERROR = 1;

        final int LEVEL_NORMAL = 0;



        public static void main(String[] args) {

                Server s = new Server();

                if (s.runServer()) {

                        s.listenToClients();

                } else {

                    

                }

        }

    

        public class ClientHandler implements Runnable {



                Socket client;

                BufferedReader reader;

            

                public ClientHandler(Socket client) {

                        try {

                                this.client = client;

                                reader = new BufferedReader(new InputStreamReader(client.getInputStream()));

                        } catch (IOException e) {

                                e.printStackTrace();

                        }

                }

            

                @Override

                public void run() {

                        String nachricht;

                    

                        try {

                                while((nachricht = reader.readLine()) != null) {

                                        appendTextToConsole("Vom Client: \n" + nachricht, LEVEL_NORMAL);

                                        sendToAllClients(nachricht);

                                }

                        } catch (IOException e) {

                                e.printStackTrace();

                        }

                }

        }

    

        public void listenToClients() {

                while(true) {

                        try {

                                Socket client = server.accept();

                            

                                PrintWriter writer = new PrintWriter(client.getOutputStream());

                                list_clientWriter.add(writer);

                            

                                Thread clientThread = new Thread(new ClientHandler(client));

                                clientThread.start();

                        } catch (IOException e) {

                                e.printStackTrace();

                        }           

                }

        }



        public boolean runServer() {

                try {

                        server = new ServerSocket(5555);

                        appendTextToConsole("Server wurde gestartet!", LEVEL_ERROR);

                    

                        list_clientWriter = new ArrayList<PrintWriter>();

                        return true;

                } catch (IOException e) {

                        appendTextToConsole("Server konnte nicht gestartet werden!", LEVEL_ERROR);

                        e.printStackTrace();

                        return false;

                }

        }

    

        public void appendTextToConsole(String message, int level) {

                if(level == LEVEL_ERROR) {

                        System.err.println(message + "\n");

                } else {

                        System.out.println(message + "\n");

                }

        }

    

        public void sendToAllClients(String message) {

                Iterator it = list_clientWriter.iterator();

            

                while(it.hasNext()) {

                        PrintWriter writer = (PrintWriter) it.next();

                        writer.println(message);

                        writer.flush();

                }

        }

}























Meine Client Klasse:







import java.util.*;

import javax.swing.*;

import java.net.*;

import java.io.*;

import java.awt.event.*;

import java.awt.*;

public class Client {

 

 

    DefaultListModel<String> data = new DefaultListModel<String>();

    JFrame clientFrame;

    JPanel clientPanel;

    JTextArea textArea_Messages;

    JTextField textField_ClientMessage;

    JButton button_SendMessage;

    JTextField textField_Username;

    JScrollPane scrollPane_Messages;

 

    Socket client;

    PrintWriter writer;

    BufferedReader reader;

    private JTextPane txtpnEingelogteUser;

 



 

    public static void main(String[] args) {

        Client c = new Client();

        c.createGUI();

    }

 

    public void createGUI() {

        clientFrame = new JFrame("Chatprogramm");

        clientFrame.setSize(800, 600);

    

        // Panel erzeugen, welches alle anderen Inhalte enthält

        clientPanel = new JPanel();

    

        textArea_Messages = new JTextArea();

        textArea_Messages.setEditable(false);

    

        // Scrollbalken zur textArea hinzufügen

        scrollPane_Messages = new JScrollPane(textArea_Messages);

        scrollPane_Messages.setBounds(96, 5, 500, 500);

        scrollPane_Messages.setPreferredSize(new Dimension(500, 500));

        scrollPane_Messages.setMinimumSize(new Dimension(700, 500));

        scrollPane_Messages.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);

        scrollPane_Messages.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);     

    

    

    

        if(!connectToServer()) {

            // Connect-Label anzeigen ob verbunden oder nicht...

        }

    

        Thread t = new Thread(new MessagesFromServerListener());

        t.start();

        clientPanel.setLayout(null);

    

        clientPanel.add(scrollPane_Messages);

    

        // Panel zum ContentPane (Inhaltsbereich) hinzufügen

        clientFrame.getContentPane().add(BorderLayout.CENTER, clientPanel);

    

        textField_ClientMessage = new JTextField(38);

        textField_ClientMessage.setBounds(200, 511, 310, 20);

        textField_ClientMessage.addKeyListener(new SendPressEnterListener());

    

        textField_Username = new JTextField(10);

        textField_Username.setBounds(10, 511, 86, 20);

        clientPanel.add(textField_Username);

        clientPanel.add(textField_ClientMessage);

    

        button_SendMessage = new JButton("Senden");

        button_SendMessage.setBounds(515, 510, 69, 23);

        button_SendMessage.addActionListener(new SendButtonListener());

        clientPanel.add(button_SendMessage);

    

        JList list = new JList();

        list.setModel(new AbstractListModel() {

            String[] values = new String[] {};

            public int getSize() {

                return values.length;

            }

            public Object getElementAt(int index) {

                return values[index];

            }

        });

        list.setBounds(634, 64, 121, 443);

        clientPanel.add(list);

    

        JButton btnHinzufügen = new JButton("Login");

        btnHinzufügen.setBounds(106, 510, 89, 23);

        btnHinzufügen.addActionListener(new ActionListener() {



            @Override

            public void actionPerformed(ActionEvent arg0) {

            

                String text = textField_Username.getText();

                data.addElement(text);

                list.setModel(data);

            }

        

        });

        

    

    

    

        clientPanel.add(btnHinzufügen);

    

        txtpnEingelogteUser = new JTextPane();

        txtpnEingelogteUser.setText("Eingeloggte User:");

        txtpnEingelogteUser.setBounds(634, 28, 121, 20);

        clientPanel.add(txtpnEingelogteUser);

    

  

    

    

    

    

        clientFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        clientFrame.setVisible(true);

    }

 

    public boolean connectToServer() {

        try {

            client = new Socket("127.0.0.1", 5555);

            reader = new BufferedReader(new InputStreamReader(client.getInputStream()));

            writer = new PrintWriter(client.getOutputStream());

            appendTextMessages("Willkommen");

        

            return true;

        } catch(Exception e) {

            appendTextMessages("Connection lost");

            e.printStackTrace();

        

            return false;

        }

    }

 

    public void sendMessageToServer() {

        writer.println(textField_Username.getText() + ": " + textField_ClientMessage.getText());

        writer.flush();

    

        textField_ClientMessage.setText("");

        textField_ClientMessage.requestFocus();

    }

 

    public void appendTextMessages(String message) {

        textArea_Messages.append(message + "\n");

    }

 

    // Listener

    public class SendPressEnterListener implements KeyListener {

        @Override

        public void keyPressed(KeyEvent arg0) {

            if(arg0.getKeyCode() == KeyEvent.VK_ENTER) {

                sendMessageToServer();

            }

        }

        @Override

        public void keyReleased(KeyEvent arg0) {}

        @Override

        public void keyTyped(KeyEvent arg0) {}

    

    }

 

    public class SendButtonListener implements ActionListener {

        @Override

        public void actionPerformed(ActionEvent e) {

            sendMessageToServer();         

        }

    

    }

 

    public class MessagesFromServerListener implements Runnable {

        @Override

        public void run() {

            String message;

        

            try {

                while((message = reader.readLine()) != null) {

                    appendTextMessages(message);

                    textArea_Messages.setCaretPosition(textArea_Messages.getText().length());

                }

            } catch (IOException e) {

                appendTextMessages("Nachricht konnte nicht empfangen werden!");

                e.printStackTrace();

            }

        }

    

    }

}




Vielen Dank und Grüße
Luka
 
K

kneitzel

Gast
Bisher hast du ja gar keinen Code, der den Clients etwas mitteilt außer eben Nachrichten, die von einem Client eingehen.

Also musst du es erweitern. Clients könnten z.B. einen Namen mitteilen. Dann ließe sich so ein Client visuell darstellen.
Und dann kann der Server auch Listen von Usern an einen Client schicken.

Ein Beispiel für ein mögliches Protokoll ist z.B. IRC mit RFC 1459 (oder neuere Versionen wären 2812 / 2813)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Socket Chat entwickeln mit Java Server Client Netzwerkprogrammierung 4
J Socket Ein Chat Server Tutorial Netzwerkprogrammierung 8
S Java Chat Server Netzwerkprogrammierung 8
J Chat Server starten über GUI problem Netzwerkprogrammierung 4
P Chat in Java Netzwerkprogrammierung 3
C Java Chat Admin Kenzeichnung Netzwerkprogrammierung 14
D Chat Server/mehre Client Netzwerkprogrammierung 9
Androbin Socket Fehlerhafter Applet-Chat Netzwerkprogrammierung 12
C Microsoft Comic Chat Netzwerkprogrammierung 0
G Socket Socket verbindung für Chat System Netzwerkprogrammierung 3
O Chat (Server) sendet an verschieden Benutzer. Netzwerkprogrammierung 10
J Chat programmieren Netzwerkprogrammierung 12
L Chat Server programmieren Netzwerkprogrammierung 10
TheJavaKid Webcam-Chat im Applet (ChatRoulette Klon) Netzwerkprogrammierung 10
H Socket Java Chat - Verbindung zum Server fehlgeschlagen. Netzwerkprogrammierung 5
K Socket Chat-GUI eigenes Event nach Empfangen Netzwerkprogrammierung 2
K chat Netzwerkprogrammierung 13
F RMI einfacher Chat - Callbacks(?) funktionieren nicht Netzwerkprogrammierung 7
L Socket Chat funktioniert nicht Netzwerkprogrammierung 2
T Socket Java Chat Netzwerkprogrammierung 2
xDarkSunx Chat JFrame Netzwerkprogrammierung 3
xDarkSunx Hilfe Chat Login Netzwerkprogrammierung 7
E JAVA Chat Netzwerkprogrammierung 19
C Java Chat funktioniert nicht richtig Netzwerkprogrammierung 6
I Chat-Client empfängt nichts vom Server Netzwerkprogrammierung 3
A Socket UDP Chat Verbindungsproblem im WWW (Server sendet ins leere) Netzwerkprogrammierung 11
A Multi-User-Chat Netzwerkprogrammierung 2
M Socket Chat-Client-Problem Netzwerkprogrammierung 8
E Userliste für Chat Applet Netzwerkprogrammierung 4
L Socket Chat Server für mehrere Clients Netzwerkprogrammierung 7
J Framework/ Muster für Chat-ähnliches Programm gesucht Netzwerkprogrammierung 2
AMStyles Client Server basierter Chat Netzwerkprogrammierung 7
M chat als applet umgeschrieben - unbekannter fehler :( Netzwerkprogrammierung 2
P Socket Chat selbst bauen + Multiusereditor Netzwerkprogrammierung 13
T Java Chat über UDP Netzwerkprogrammierung 7
Developer_X Habe fragen zur Chat Programmierung Netzwerkprogrammierung 4
P Java Multiuser Chat hohe Systemauslastung Netzwerkprogrammierung 24
D Hilfe ich komme bei meinem UDP chat Server nicht mehr weiter Netzwerkprogrammierung 9
B Die alte Leier: "Chat" Netzwerkprogrammierung 3
M chat funktioniert nicht (Connection refused: connect) Netzwerkprogrammierung 3
R Java-Chat-Applet funktioniert nur in Eclipse Netzwerkprogrammierung 3
S Client-Server Chat Problem nur im lokalen Netztwerk Netzwerkprogrammierung 23
DamienX Chat Socketserver/Client. wo ist das Problem? Netzwerkprogrammierung 2
J Client-Client-Chat ohne Serverbeteiligung Netzwerkprogrammierung 2
A Wichtig für einen Chat? Netzwerkprogrammierung 4
S Java Applet Chat Grundsatzfrage Netzwerkprogrammierung 6
R Java Chat über Inet connecten Netzwerkprogrammierung 3
F Chat Programm. Verständnisfrage while-Schleife Netzwerkprogrammierung 7
P Probleme bei Chat programm Netzwerkprogrammierung 2
C Voice Chat Netzwerkprogrammierung 3
G FAQ Chat geht nicht ? Netzwerkprogrammierung 4
T Schriftfarbe im Chat ändern Netzwerkprogrammierung 2
G ActionEvent klappt beim Chat nicht Netzwerkprogrammierung 5
J Kleines Problem mit Chat Server Netzwerkprogrammierung 2
T Chat-Client Netzwerkprogrammierung 12
G Chat zwischen applets: möglich? Netzwerkprogrammierung 2
T Chat mit mehreren Clients Netzwerkprogrammierung 3
C Chat , Streamproblem, PumpingException, Danke Netzwerkprogrammierung 2
S RMI Chat Problem, Client bekannt machen Netzwerkprogrammierung 2
V probleme mit dem chat programm Netzwerkprogrammierung 4
K Lokaler Chat Netzwerkprogrammierung 5
S Chat aufs Internet ausweiten Netzwerkprogrammierung 5
J Router behindert Chat Netzwerkprogrammierung 9
S Knuddels Chat System: Bot / Nachrichten verschicken? Netzwerkprogrammierung 6
G Chat - was brauch ich Netzwerkprogrammierung 2
André B. Brauche Hilfe bei Chat Netzwerkprogrammierung 6
K Problem mit "Chat" Netzwerkprogrammierung 2
N Java-Chat (lauffähig) macht Probleme auf der Konsole Netzwerkprogrammierung 6
Paule Acces denied bei Chat Netzwerkprogrammierung 6
B Multi-chat Problem Netzwerkprogrammierung 3
N Java Chat-Problem Netzwerkprogrammierung 4
G Java Chat mit HTML Cleint Netzwerkprogrammierung 3
G Chat Programm - was ist los? Netzwerkprogrammierung 9
A server mit 2 Ports : Mit und ohne SSL Chat system Netzwerkprogrammierung 10
Z chat: wann http und wann sockets verwenden? Netzwerkprogrammierung 11
M Socket Verbindungen für einen Chat Netzwerkprogrammierung 10
R Mini-Chat löst BindException aus Netzwerkprogrammierung 7
F Multiclient Chat Netzwerkprogrammierung 12
K Chat: Nur 1 Verbindung zum Server möglich :( Netzwerkprogrammierung 6
K Chat: Verbindung kommt nicht zu stande Netzwerkprogrammierung 6
S JAV07P SGD client/server chat Netzwerkprogrammierung 4
C IRC CHAT auslesen -> Sockets/input und output Streams Netzwerkprogrammierung 9
S Einfacher Multiuser chat in java Netzwerkprogrammierung 18
V Datei Download Fenster Netzwerkprogrammierung 9
D Komisches Fenster bei Serversocket Netzwerkprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben