Tachchen allerseits
Ich hab nochmal eine Frage zur Server/Client-Beziehung...
Ich habe jetzt meinen Client:
Wenn ich jetzt als Client den Chat beende wirft er eine Exception Socket closed und der Server schmiert dabei dann auch ab...
Wie kann ich vernünftig als Client den Chat beenden, ohne dass alles den Bach runtergeht?
So long,
Zel
Ich hab nochmal eine Frage zur Server/Client-Beziehung...
Ich habe jetzt meinen Client:
Java:
package network;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import javax.swing.JOptionPane;
/**
* Klasse: Diese Klasse erbt von der Klasse Thread stellt den Client zur
* Verfuegung, um zum Server zu connecten.
*/
public class Client extends Thread {
/**
* Attribut: Ein statischer Socket wird deklariert und initalisiert, public
* und statisch ist er deshalb, weil andere Klassen auf diesen Zugriff haben
* muessen.
*/
private static Socket clientSocket = new Socket();
/**
* Attribut: Ein String wird deklariert und dazu benutzt, die IP des Servers
* eingeben zu koennen.
*/
private String ip;
/**
* Attribut: Eine finale Variable des Typs integer wird angelegt - diese
* stellt den Port zum Connecten zum Server da.
*/
private final int port = 2000;
/**
* .
*/
private String username;
/**
* Attribut: Eine Variable des Typs DataOutputStreams wird deklariert,
* welche den Sinn hat, den Nicknamen des Benutzers beim Verbinden zum
* Server direkt an selbigen zu senden.
*/
private DataOutputStream writeUsername;
/**
* Konstruktor: In diesem Konstruktor wird der Thread gestartet und eine
* Variable neu initialisiert.
*
* @param ip
* Ein String wird uebergeben, der die Benutzung der IP
* ermoeglicht.
* @param username
* Ein String wird uebergeben, der die Benutzung des
* Benutzernamens ermoeglicht.
*/
public Client(String ip, String username) {
this.ip = ip;
this.username = username;
this.start();
}
/**
* Methode: Die run()-Methode wird ausgefuert, wenn der Thread gestartet
* wird. Diese run()-Methode sorgt dafuer, dass das Programm nach dem
* erfolgreichen Verbindungsaufbau zum Server nicht das Programm beendet,
* sondern noch weiterlaeuft.
*/
public void run() {
try {
clientSocket = new Socket(ip, port);
writeUsername =
new DataOutputStream(clientSocket.getOutputStream());
writeUsername.writeBytes(username + "\n");
JOptionPane.showMessageDialog(null, "Verbindung zu " + ip
+ " erfolgreich hergestellt!");
new ListenToServer(clientSocket, username, ip);
} catch (UnknownHostException exc) {
if (!clientSocket.isConnected()) {
JOptionPane.showMessageDialog(null,
"Verbindung konnte nicht hergestellt werden...");
closeSocket();
}
} catch (IOException exc) {
if (!clientSocket.isConnected()) {
JOptionPane.showMessageDialog(null,
"Verbindung konnte nicht hergestellt werden...");
closeSocket();
}
}
}
/**
* Methode: Diese Methode beendet die Verbindung zum Server, bevor das
* Programm als solches beendet wird.
*/
public void closeSocket() {
try {
clientSocket.close();
System.exit(0);
} catch (IOException exc) {
}
}
/**
* Methode: Ein statischer!!!(...) getter wird hier angelegt, damit auf den
* Socket auch außerhalb der Klasse zugegriffen werden kann.
*
* @return clientSocket Der Socket wird zurueckgegeben.
*/
public static Socket getClientSocket() {
return clientSocket;
}
}
Wenn ich jetzt als Client den Chat beende wirft er eine Exception Socket closed und der Server schmiert dabei dann auch ab...
Wie kann ich vernünftig als Client den Chat beenden, ohne dass alles den Bach runtergeht?
So long,
Zel