Kommentare formatiert

This commit is contained in:
BerdanInformatik123 2021-05-16 20:56:13 +02:00
parent c1bb7a2070
commit c9a44df33b

View file

@ -20,17 +20,16 @@ import java.awt.event.ActionEvent;
/** /**
* Hauptklasse des Clients * Hauptklasse des Clients
*
* @version 0.1.3 * @version 0.1.3
* @author berdan * @author berdan
*/ */
public class Client1 extends JFrame { public class Client1 extends JFrame {
/**
/* * Hier werden Objekte und Variablen deklariert, damit diese in allen
Hier werden Objekte und Variablen deklariert, damit diese * Methoden genutzt werden können.
in allen Methoden genutzt werden können.
*/ */
private static JPanel contentPane; private static JPanel contentPane;
JTextField txtMessage; JTextField txtMessage;
@ -48,11 +47,13 @@ public class Client1 extends JFrame {
public static int anzahlRekursionen = 0; public static int anzahlRekursionen = 0;
public static Message temp = new Message("leer", "leer"); public static Message temp = new Message("leer", "leer");
/* /**
In der main Methode wird das GUI erstellt und die * In der main Methode wird das GUI erstellt und die start() Methode
start() Methode aufgerufen. * aufgerufen.
*
* @param args
* @throws InterruptedException
*/ */
public static void main(String[] args) throws InterruptedException { public static void main(String[] args) throws InterruptedException {
t1 = new Client1(); t1 = new Client1();
EventQueue.invokeLater(new Runnable() { EventQueue.invokeLater(new Runnable() {
@ -66,23 +67,16 @@ public class Client1 extends JFrame {
} }
}); });
try { try {
start(); start();
} catch (ClassNotFoundException e) { } catch (ClassNotFoundException | IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace(); e.printStackTrace();
} }
} }
/**
/* * In der Methode Client1() wird das GUI und die Befehle die durch einen
In der Methode Client1() wird das GUI * Click des Button's ausgelöst werden festgelegt (Konstruktur)
und die Befehle die durch einen Click des
Button's ausgelöst werden festgelegt
*/ */
public Client1() { public Client1() {
@ -105,22 +99,19 @@ public class Client1 extends JFrame {
contentPane.add(txtUsername); contentPane.add(txtUsername);
txtUsername.setColumns(10); txtUsername.setColumns(10);
/**
/* * Der Button "Send" nimmt die aktuelle Nachricht, welche im Textfeld
Der Button "Send" nimmt die aktuelle Nachricht, * "message" geschrieben wurde und schreibt diese als ein Message-Objekt
welche im Textfeld "message" geschrieben wurde und * in den Output-Stream an den Server, falls die Socket bereits
schreibt diese als ein Message-Objekt in den Output-Stream * verbunden ist.
an den Server, falls die Socket bereits verbunden ist. *
* Falls die Nachricht "exit" sein sollte, wird die GUI beendet.
Falls die Nachricht "exit" sein sollte, wird
die GUI beendet.
*/ */
JButton btnSend = new JButton("Send"); JButton btnSend = new JButton("Send");
btnSend.addActionListener(new ActionListener() { btnSend.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) { public void actionPerformed(ActionEvent arg0) {
if(verbunden){ if (verbunden) {
String themessage = txtMessage.getText(); String themessage = txtMessage.getText();
String theusername = txtUsername.getText(); String theusername = txtUsername.getText();
@ -133,21 +124,18 @@ public class Client1 extends JFrame {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
try{
try { try {
oboust.writeObject(tosend); oboust.writeObject(tosend);
oboust.flush(); oboust.flush();
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} } catch (Exception k) {
} catch( Exception k){
print("KEINE VERBINDUNG"); print("KEINE VERBINDUNG");
} }
if(temp.getMessage().equals("exit")){ if (temp.getMessage().equals("exit")) {
System.exit(0); System.exit(0);
} }
txtMessage.setText(""); txtMessage.setText("");
} }
@ -158,10 +146,9 @@ public class Client1 extends JFrame {
btnSend.setBounds(264, 229, 79, 23); btnSend.setBounds(264, 229, 79, 23);
contentPane.add(btnSend); contentPane.add(btnSend);
/* /**
Hier wird die textArea, auf welcher der Text ausgegeben wird * Hier wird die textArea, auf welcher der Text ausgegeben wird
initialisiert * initialisiert
*/ */
textArea = new JTextArea(currentText); textArea = new JTextArea(currentText);
textArea.setLineWrap(true); textArea.setLineWrap(true);
@ -170,15 +157,12 @@ public class Client1 extends JFrame {
textArea.setBounds(20, 42, 323, 176); textArea.setBounds(20, 42, 323, 176);
contentPane.add(textArea); contentPane.add(textArea);
/* /**
Der Start Button sorgt sorgt dafür, dass der Username * Der Start Button sorgt sorgt dafür, dass der Username festgesetzt
festgesetzt wird, wodurch er nicht veränderlich ist. * wird, wodurch er nicht veränderlich ist. Außerdem wird die globale
Außerdem wird die globale Variabel j von 0 auf 1 gestzt, * Variabel j von 0 auf 1 gestzt, wodurch die start-Methode weiß, dass
wodurch die start-Methode weiß, dass sie eine Verbindung * sie eine Verbindung aufbauen soll.
aufbauen soll.
*/ */
JButton btnStart = new JButton("Start"); JButton btnStart = new JButton("Start");
btnStart.addActionListener(new ActionListener() { btnStart.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) { public void actionPerformed(ActionEvent arg0) {
@ -192,60 +176,61 @@ public class Client1 extends JFrame {
btnStart.setBounds(116, 10, 89, 23); btnStart.setBounds(116, 10, 89, 23);
contentPane.add(btnStart); contentPane.add(btnStart);
} }
/* /**
In der Print-Methode wird der neue Text (also eine neue Nachricht) * In der Print-Methode wird der neue Text (also eine neue Nachricht) auf
auf die textArea abgebildet. * die textArea abgebildet.
*
* @param neuerText
*/ */
public static void print(String neuerText) {
public static void print(String neuerText){
currentText = neuerText + "\n" + currentText; currentText = neuerText + "\n" + currentText;
textArea.setText(currentText); textArea.setText(currentText);
} }
/* /**
Die start-Methode wartet, bis die Variable verbunden durch Klicken * Die start-Methode wartet, bis die Variable verbunden durch Klicken des
des Start Buttons auf true gesetzt wird, erst dann beginnt die * Start Buttons auf true gesetzt wird, erst dann beginnt die eigentliche
eigentliche Methode. * Methode.
*
Es wird dann eine Verbindung zum Socket über den Port * Es wird dann eine Verbindung zum Socket über den Port 1236 aufgebaut.
1236 aufgebaut. Sollte dies nicht Möglich sein, wird die * Sollte dies nicht Möglich sein, wird die Fehlermeldung in der GUI
Fehlermeldung in der GUI ausgegeben, sodass der Nutzer weiß, * ausgegeben, sodass der Nutzer weiß, dass keine Vebrindung möglich ist.
dass keine Vebrindung möglich ist. *
* Es wird im Sekundentakt nach einer neuen Verbindung gesucht.
Es wird im Sekundentakt nach einer neuen Verbindung gesucht. *
* @throws IOException
* @throws ClassNotFoundException
* @throws InterruptedException
*/ */
public static void start() throws IOException, ClassNotFoundException, InterruptedException {
while (!verbunden) {
public static void start() throws IOException, ClassNotFoundException, InterruptedException{
while(!verbunden){
Thread.sleep(100); Thread.sleep(100);
} }
txtUsername.setEnabled(false); txtUsername.setEnabled(false);
Scanner scan = new Scanner(System.in); Scanner scan = new Scanner(System.in);
try{ try {
socket = new Socket( "localhost", 1236 ); socket = new Socket("localhost", 1236);
oboust = new ObjectOutputStream(socket.getOutputStream()); oboust = new ObjectOutputStream(socket.getOutputStream());
obinstr = new ObjectInputStream(socket.getInputStream()); obinstr = new ObjectInputStream(socket.getInputStream());
print("VERBINDUNG HERGESTELLT"); print("VERBINDUNG HERGESTELLT");
}catch(Exception KeineSocket){ } catch (Exception KeineSocket) {
print("SERVER ANTWORTET NICHT"); print("SERVER ANTWORTET NICHT");
try { try {
Thread.sleep(5000); Thread.sleep(5000);
} catch (InterruptedException e) { } catch (InterruptedException e) {
// TODO Auto-generated catch block // TODO Auto-generated catch block
e.printStackTrace(); e.printStackTrace();
} }
anzahlRekursionen++; anzahlRekursionen++;
if(anzahlRekursionen == 10){ if (anzahlRekursionen == 10) {
print("KEINE ANTWORT, CLIENT WIRD BEENDET"); print("KEINE ANTWORT, CLIENT WIRD BEENDET");
Thread.sleep(10000); Thread.sleep(10000);
System.exit(0); System.exit(0);
@ -255,35 +240,30 @@ public class Client1 extends JFrame {
} }
Object erhalten = null; Object erhalten = null;
Message message = new Message("leer", "leer"); Message message = new Message("leer", "leer");
/* /**
Die While Schleife ist der Listener, * Die While Schleife ist der Listener, dieser wartet auf Nachrichten
dieser wartet auf Nachrichten aus dem Server und * aus dem Server und gibt diese dann aus.
gibt diese dann aus. *
* Im Falle eines Verindungsabbruches versucht er es 5 mal im Abstand
Im Falle eines Verindungsabbruches versucht er * von 2 Sekunden nochmal eine Nachricht zu senden und ruft dann wieder
es 5 mal im Abstand von 2 Sekunden nochmal eine Nachricht * die start() Methode auf. wodurch die Verbindung nochmal neu
zu senden und ruft dann wieder die start() Methode auf. * hergestellt wird.
wodurch die Verbindung nochmal neu hergestellt wird. *
* Die While-Schleife wird abgebrochen, sobald die Nachricht, welche der
Die While-Schleife wird abgebrochen, sobald die Nachricht, * Benutzer über das GUI sendet "exit" lautet.
welche der Benutzer über das GUI sendet "exit" lautet. *
*/ */
while (!temp.getMessage().equals("exit")) {
try {
while(!temp.getMessage().equals("exit")){
//System.out.println("WHILE");
try{
//System.out.println("hile4"); //System.out.println("hile4");
System.out.println("Nachricht erhalten"); System.out.println("Nachricht erhalten");
erhalten = obinstr.readObject(); //Bleibt hier stehen, bis ein neues Object reinkommt erhalten = obinstr.readObject(); //Bleibt hier stehen, bis ein neues Object reinkommt
message = (Message)erhalten; message = (Message) erhalten;
System.out.println("[" + message.getUsername() + "] " + message.getMessage()); System.out.println("[" + message.getUsername() + "] " + message.getMessage());
String Ausgeben = message.getTime() + " [" + message.getUsername() + "] " + message.getMessage(); String Ausgeben = message.getTime() + " [" + message.getUsername() + "] " + message.getMessage();
print(Ausgeben); print(Ausgeben);
@ -291,53 +271,44 @@ public class Client1 extends JFrame {
oboust.flush(); oboust.flush();
} } catch (SocketException h) {
catch(SocketException h){
System.out.println(h); System.out.println(h);
print("VERBINDUNGSABBRUCH"); print("VERBINDUNGSABBRUCH");
anzahlVersuche++; anzahlVersuche++;
Thread.sleep(2000); Thread.sleep(2000);
if (anzahlVersuche == 5) {
if(anzahlVersuche==5){
anzahlVersuche = 0; anzahlVersuche = 0;
anzahlRekursionen++; anzahlRekursionen++;
if(anzahlRekursionen == 10){ if (anzahlRekursionen == 10) {
print("KEINE ANTWORT, CLIENT WIRD BEENDET"); print("KEINE ANTWORT, CLIENT WIRD BEENDET");
Thread.sleep(10000); Thread.sleep(10000);
System.exit(0); System.exit(0);
} }
start(); start();
System.exit(0); System.exit(0);
} }
} } catch (Exception f) {
catch(Exception f){
Thread.sleep(1000); Thread.sleep(1000);
} }
} }
/* /**
Nach dem Abbruch der While Schleife, was nur bei der * Nach dem Abbruch der While Schleife, was nur bei der Nachricht exit
Nachricht exit passiert, schließt der Client * passiert, schließt der Client den ObjectOutputstream,
den ObjectOutputstream, Objectinputstream und den Socket * Objectinputstream und den Socket und beendet dann das Programm
und beendet dann das Programm
*/ */
oboust.close(); oboust.close();
obinstr.close(); obinstr.close();
socket.close(); socket.close();
System.exit(0); System.exit(0);
} }
} }