Socket Chat entwickeln mit Java Server Client

Hannah *

Mitglied
Hallo

ich bin Neu hier, habe mir das Java programmieren weitestgehend selbst bei gebracht und bin sicher kein Profi.
Ich versuche gerade ein Chat zu programmieren mit Java in Eclipse. Die GUI habe ich mit Window Builder gemacht. Das Netzwerk mit Server habe ich nach einer online Anleitung nach programmiert, allerdings wurde die GUI dort nicht mit einem Window Builder erstellt. Leider funktioniert die Client Server Verbindung nicht. Der Server müsste so einigermaßen laufen. Die Threads beim Client sind glaube ich nicht ganz so richtig.

Gibt es vielleicht jemand der mich bei meinem Projekt einbisschen untersützen kann?

Ich bin super dankbar wenn mir jemand bald helfen kann.

Hannah
 

Anhänge

  • Server.txt
    5,1 KB · Aufrufe: 5
  • Layout_2.txt
    14,1 KB · Aufrufe: 4

httpdigest

Top Contributor
Im Layout_2 hast du zwei Fehler:

1. du hast den Aufruf von connectToServer auskommentiert, der ja die Verbindung vom Client zum Server herstellt
2. du überschattest/verdeckst Instanzvariablen, weil du sie mit demselben Namen nochmal als lokale Methodenvariablen deklarierst, auf die du aber später als Instanzvariablen wieder zugreifst und sie dann null sind, z.B. `txtArea_Ausgabe` und `txtArea_Eingabe`.

Anschliessend funktioniert es (solange du ein 9 Zeichen langes Passwort eingegeben hast).

Kleiner Tipp am Rande: Drücke mal bitte die Tastenkombinationen Strg+Shift+F und anschliessend Strg+Shift+O.
 

Hannah *

Mitglied
[CODE lang="java" title="Klasse Client"]import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JLabel;

import java.awt.Color;
import javax.swing.JButton;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;


public class Client {

private JFrame frame;
private JTextField txtField_Chatname;
private JTextField txtField_Passworteingabe;
private JTextField txtField_Userschreibt;
private JTextField txtField_Passwortabfrage;

private JTextArea txtArea_Ausgabe;
private JScrollPane scrollPane_Ausgabe;
private JTextArea txtArea_Eingabe;
private JScrollPane scrollPane_Eingabe;

private JButton btnChaten;
private JButton btnSend;
private JButton btnSendSave;
private JButton btnPasswortprüfen;
//-----------------------------------------------------------------
String name;
String nachricht;
String passwort;
String passworttest;
String sicherheit;
//------------------------------------------------------------------
Socket client;
PrintWriter writer;
BufferedReader reader;
//-------------------------------------------------------------------------------------


//------------------------------------------------------------------------------------
public static void main(String[] args)
{
GUI();
}


public static void GUI()
{
EventQueue.invokeLater(new Runnable()
{
@Override
public void run()
{
try
{
Client window = new Client();
window.frame.setVisible(true);
}
catch (Exception e)
{
e.printStackTrace();
}
}
});

}

// Client Verbindung zum Server
public boolean connectToServer()
{
try
{
client = new Socket("127.0.0.1", 5555); // Erzeuge Verbindung zu Server
reader = new BufferedReader(new InputStreamReader(client.getInputStream())); // InputStream
writer = new PrintWriter(client.getOutputStream()); // OutputStream
txtArea_Ausgabe.append("Verbindung hergestellt\n"); // ausgabe Verbindung wurde hergestellt.

return true;
}
catch(Exception e)
{
txtArea_Ausgabe.append("Verbindung konnte nicht hergestellt werden\n"); // if(!connectToServer())
//e.printStackTrace();

return false;
}
}

// Message wird als ein String an den Server gesendet
public void sendMessageToServer()
{
String message = new String ();
message = sicherheit + "|" + name + "|" + passwort + "|" + nachricht ;
writer.println(message); // zeile wird an server gesendet
writer.flush();
}

// Message wird vom Server empfangen
public class MessagesFromServerListener implements Runnable
{
@Override
public void run()
{
String nachrichtAus = null;

try
{
while((nachrichtAus = reader.readLine()) != null)
{
appendTextMessages(nachrichtAus);
txtArea_Ausgabe.setCaretPosition(txtArea_Ausgabe.getText().length());
}
}
catch (IOException e)
{
//txtArea_Ausgabe.append("Nachricht konnte nicht empfangen werden!");
//e.printStackTrace();
}
}
}

// Text wird dem Chatverlauf hinzugefügt
public void appendTextMessages(String nachrichtAus)
{
// Test
//txtArea_Ausgabe.append("\n"+ nachrichtAus);

//writer.println(sicherheit + "|" + name + "|" + passwort + "|" + nachricht );
// hier müssen die Ausgaben abgefragt werden

String sicherheitAus;
String nameAusgabe;
String passwortAusgabe;
String nachrichtAusgabe;

String str = nachrichtAus;
String split[] = str.split("\\|");

sicherheitAus = split[0] ;
nameAusgabe = split[1] ;
passwortAusgabe = split[2];
nachrichtAusgabe = split[3] ;

// Test
/*
System.out.print(sicherheitAus + "\n");
System.out.print(nameAusgabe + "\n");
System.out.print(passwortAusgabe + "\n");
System.out.print(nachrichtAusgabe + "\n");
txtArea_Ausgabe.append(nameAusgabe + ":" + nachrichtAusgabe +"\n");
*/

if (sicherheitAus.contains("0"))
{
txtArea_Ausgabe.append( nameAusgabe + " : " + nachrichtAusgabe + "\n");
}

else if (sicherheitAus.contains("1"))
{
txtField_Userschreibt.setText(nameAusgabe);

btnPasswortprüfen.addActionListener(new btnPasswortprüfenListener());

// frage btnPasswortprüfenListener nach Passwort!


txtArea_Ausgabe.append( nameAusgabe + " : " + nachrichtAusgabe + "\n" );


if (passwortAusgabe == passworttest)
{
//txtArea_Ausgabe.append( nameAusgabe + " : " + nachrichtAusgabe + "\n");
}
else
{
txtArea_Ausgabe.append("falsches Passwort für Save Chat Nachricht von " + nameAusgabe + "\n" );
}


}

}

//-----------Listener Buttons----------------------------------------------------------------------------------------------------------------------

// Sucht Chatusername
public class btnChatenListener implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e)
{
name = txtField_Chatname.getText();
}
}

// Sendebutton für normale Nachrichten
public class btnSendListener implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e)
{
nachricht = txtArea_Eingabe.getText();
passwort = txtField_Passworteingabe.getText();
sicherheit = "0";

sendMessageToServer(); // nachricht an Server senden
txtArea_Eingabe.setText(null);

if (passwort.length() == 9)
{
// führe aus
// sende an server user, nachricht, passwort
//txtArea_Ausgabe.append(name +": " + nachricht + "\n");
}
}
}

// Sendebutton für sichere Nachrichten
public class btnSendSaveListener implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e)
{
nachricht = txtArea_Eingabe.getText();
passwort = txtField_Passworteingabe.getText();
sicherheit = "1";

if (passwort.length() == 9)
{
// führe aus
// sende an server user, nachricht, save passwort
//txtField_Userschreibt.setText(name);
sendMessageToServer(); // nachricht an Server senden
txtArea_Eingabe.setText(null);
}
else
txtField_Passworteingabe.setToolTipText("Das Passwort muss genau 9 Zeichen haben");
}
}

// Passwortprüfen
public class btnPasswortprüfenListener implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e)
{
passworttest = txtField_Passwortabfrage.getText();

}
}


//-----------------------------------------------------------Layout------------------------------------------

public Client()
{
initialize();
}

public void initialize()
{
// Neues Fenster
frame = new JFrame();

frame.getContentPane().setBackground(new Color(188, 212, 230)); // Farbe Hintergrund
frame.setBounds(100, 100, 750, 800); // Größe Fenster
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Schließen wenn das Fenster geschloßen wird
frame.getContentPane().setLayout(null);

//--------------Titel--------------------------------------------------------

JLabel lblSaveChat = new JLabel("Projekt Save Chat");
lblSaveChat.setFont(new Font("Arial", Font.BOLD, 12));
lblSaveChat.setBounds(28, 11, 102, 14);
frame.getContentPane().add(lblSaveChat);

//-------------Chatverlauf--------------------------------------------------------------------------

scrollPane_Ausgabe = new JScrollPane();
scrollPane_Ausgabe.setBounds(28, 36, 442, 474);
frame.getContentPane().add(scrollPane_Ausgabe);

txtArea_Ausgabe = new JTextArea();
txtArea_Ausgabe.setEditable(false);
txtArea_Ausgabe.setBorder(null);
txtArea_Ausgabe.setToolTipText("Chatverlauf");
txtArea_Ausgabe.setLineWrap(true);
scrollPane_Ausgabe.setViewportView(txtArea_Ausgabe);

//-----------Client-----------------------------------------------------------------

JLabel lblname = new JLabel("Chatname eingeben");
lblname.setFont(new Font("Arial", Font.PLAIN, 12));
lblname.setBounds(502, 36, 198, 14);
frame.getContentPane().add(lblname);

txtField_Chatname = new JTextField();
txtField_Chatname.setToolTipText("Geben Sie hier Ihren Namen ein ");
txtField_Chatname.setBounds(502, 56, 96, 20);
frame.getContentPane().add(txtField_Chatname);
txtField_Chatname.setColumns(10);

btnChaten = new JButton("chat on");
btnChaten.setFont(new Font("Arial", Font.PLAIN, 12));
btnChaten.setBackground(new Color(0, 255, 255));
btnChaten.setToolTipText("Drücken Sie hier um dem Chat beizutreten");
btnChaten.setBounds(611, 55, 89, 23);
frame.getContentPane().add(btnChaten);

// Aktion
btnChaten.addActionListener(new btnChatenListener());

//--------------Texteingabe-----------------------------------------------------------------------------

JLabel lblTexteingabe = new JLabel("Texteingabe");
lblTexteingabe.setFont(new Font("Arial", Font.PLAIN, 12));
lblTexteingabe.setBounds(29, 521, 75, 14);
frame.getContentPane().add(lblTexteingabe);

scrollPane_Eingabe = new JScrollPane();
scrollPane_Eingabe.setBounds(28, 546, 442, 83);
frame.getContentPane().add(scrollPane_Eingabe);

txtArea_Eingabe = new JTextArea();
txtArea_Eingabe.setText("Deine Nachricht");
txtArea_Eingabe.setBorder(null);
txtArea_Eingabe.setToolTipText("Geben Sie hier Ihre Nachricht ein...");
txtArea_Eingabe.setLineWrap(true);
scrollPane_Eingabe.setViewportView(txtArea_Eingabe);

//---------Passworteingabe----------------------------------------------------------------------------------

JLabel lblPasswort = new JLabel("Passwort (9 Zeichen)");
lblPasswort.setFont(new Font("Arial", Font.PLAIN, 12));
lblPasswort.setBounds(28, 669, 124, 14);
frame.getContentPane().add(lblPasswort);

txtField_Passworteingabe = new JTextField();
txtField_Passworteingabe.setToolTipText("Geben Sie hier ein Passwort mit genau 9 Zeichen ein");
txtField_Passworteingabe.setBounds(28, 694, 113, 20);
frame.getContentPane().add(txtField_Passworteingabe);
txtField_Passworteingabe.setColumns(10);

//--------Senden------------------------------------------------------------------------------------------------

btnSend = new JButton("Send");
btnSend.setBackground(new Color(255, 240, 245));
btnSend.setFont(new Font("Arial", Font.PLAIN, 12));
btnSend.setForeground(new Color(0, 0, 0));
btnSend.setToolTipText("Nachricht wird an alle User zugestellt");
btnSend.setBounds(209, 676, 113, 23);
frame.getContentPane().add(btnSend);

JLabel lblSendnormal = new JLabel("Nachricht wird an alle User zugestellt");
lblSendnormal.setFont(new Font("Arial", Font.PLAIN, 11));
lblSendnormal.setBounds(344, 679, 185, 14);
frame.getContentPane().add(lblSendnormal);

// Aktion Normaler Sendeknopf
btnSend.addActionListener(new btnSendListener());

//-------Sicher Senden---------------------------------------------------------------------------------------------

btnSendSave = new JButton("Send Save");
btnSendSave.setBackground(new Color(216, 191, 216));
btnSendSave.setFont(new Font("Arial", Font.PLAIN, 12));
btnSendSave.setToolTipText("User muss das Passwort eingeben um die Nachricht zu sehen");
btnSendSave.setBounds(209, 710, 113, 23);
frame.getContentPane().add(btnSendSave);

JLabel lblSendSave = new JLabel("User muss das Passwort eingeben um die Nachricht zu sehen");
lblSendSave.setFont(new Font("Arial", Font.PLAIN, 11));
lblSendSave.setBounds(344, 710, 316, 20);
frame.getContentPane().add(lblSendSave);

// Aktion SaveSendeknopf
btnSendSave.addActionListener(new btnSendSaveListener());

//-----------Passwortprüfung----------------------------------------------------------------------------------

JLabel lblPasswortabfage = new JLabel("Save Chat Passwortabfrage");
lblPasswortabfage.setFont(new Font("Arial", Font.PLAIN, 12));
lblPasswortabfage.setBounds(502, 353, 185, 14);
frame.getContentPane().add(lblPasswortabfage);

txtField_Userschreibt = new JTextField();
txtField_Userschreibt.setBounds(502, 378, 113, 20);
frame.getContentPane().add(txtField_Userschreibt);
txtField_Userschreibt.setColumns(10);

JLabel lblUserPasswortabfrage = new JLabel("... schreibt, geben Sie das Passwort ein um zulesen");
lblUserPasswortabfrage.setBounds(502, 409, 211, 14);
frame.getContentPane().add(lblUserPasswortabfrage);

txtField_Passwortabfrage = new JTextField();
txtField_Passwortabfrage.setToolTipText("Geben Sie hier das Passwort ein, das Ihr Chatpartner Ihnen mitgeteilt hat");
txtField_Passwortabfrage.setBounds(564, 434, 149, 20);
frame.getContentPane().add(txtField_Passwortabfrage);
txtField_Passwortabfrage.setColumns(10);

btnPasswortprüfen = new JButton("Pruefen");
btnPasswortprüfen.setBackground(new Color(216, 191, 216));
btnPasswortprüfen.setFont(new Font("Arial", Font.PLAIN, 12));
btnPasswortprüfen.setToolTipText("Klicken Sie hier, damit Sie die Nachricht bekommen");
btnPasswortprüfen.setBounds(624, 465, 89, 23);
frame.getContentPane().add(btnPasswortprüfen);

// Aktion Passwortprüfen
btnPasswortprüfen.addActionListener(new btnPasswortprüfenListener());


//-------Frage ob Server kontakt besteht------------------------------------------------------------------------------------

if(!connectToServer())
{
// Connect-Label anzeigen ob verbunden oder nicht...
}

//-----Thread.....................................................................................................................

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

frame.getContentPane().add(scrollPane_Ausgabe);
frame.getContentPane().add(scrollPane_Eingabe);
frame.getContentPane().add(txtField_Chatname);
frame.getContentPane().add(txtField_Passworteingabe);
frame.getContentPane().add(txtField_Passwortabfrage);
frame.getContentPane().add(txtField_Userschreibt);
frame.getContentPane().add(btnChaten);
frame.getContentPane().add(btnSend);
frame.getContentPane().add(btnSendSave);
frame.getContentPane().add(btnPasswortprüfen);

}
}

//-------------ENDE-------------------------------------------------------------------------------------------------------
[/CODE]
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Chat Fenster Netzwerkprogrammierung 1
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
M VoIP Tool entwickeln Netzwerkprogrammierung 7
T imap (oder pop3/smtp) - client mit Java entwickeln Netzwerkprogrammierung 2
D HTTP Apache-HttpClient/UNAVAILABLE (java 1.4) Netzwerkprogrammierung 18
M JAX-WS unter Java 17 plötzlich nicht mehr möglich Netzwerkprogrammierung 5
K Java RMI bricht ab wenn Remote eine Methode ausgeführt werden soll Netzwerkprogrammierung 5
M HTTP Let's Encrypt und Java Trust-Store Netzwerkprogrammierung 6
JaXnPriVate Java HTTPS Server (Secure Sockets) Netzwerkprogrammierung 15
Tobero Java serversocket nicht nur zuganglich für localhost Netzwerkprogrammierung 6
D path-Variablen in eine URL hinzufügen mit Java 1.8 Netzwerkprogrammierung 2
D WebSocket Server mit HTML Client und Java Server Netzwerkprogrammierung 5
S Von Java auf passwortgeschützten Server zugreifen + Umgang mit Ports Netzwerkprogrammierung 28
S Probleme bei Java-Installation auf Server (Linux/Shell/Terminal) Netzwerkprogrammierung 6
S Java: Anbindung an einen realen Server? (+ Portfreigabe) Netzwerkprogrammierung 8
x46 Java SSLContext erstellen mit SSL-Zertifikat Netzwerkprogrammierung 1
P Jenkins Login per Java Download Manager Netzwerkprogrammierung 15
N Java socket Programmierung Filme verschicken Netzwerkprogrammierung 20
S HTTP Post?!? - Java Server Netzwerkprogrammierung 7

Ähnliche Java Themen

Neue Themen


Oben