Socket Server/Client vernünftiger Verbindungsabbruch

Zel2491

Aktives Mitglied
Tachchen allerseits ;)

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
 

Xeonkryptos

Bekanntes Mitglied
Entweder du schickst dem Server ein Keyword, womit er die Verbindung zu dir schließt oder du fängst die Exception ab und "entfernst" dann die Verbindung vom Server zum Client.
 

irgendjemand

Top Contributor
wenn der server dabei mit krachen geht ... dann solltest du wohl eher mal dessen source posten ... weil dann stimmt da was nicht ...

was allerdings den client-code angeht : "public static" ... und die begründung dazu im comment ist wirklich widerlich ...

du hast scheinbar OOP noch nicht ganz so verinnerlicht ...

wenn irgendeine klasse was von dem socket will ... dann braucht diese eine reference auf das client-objekt ...
außerdem : WEG MIT DEM STATIC !
auch ergibt ein "new Socket()" an dieser stelle KEINEN SINN da konstruktor- und method-calls nur innerhalb anderer methoden und konstruktoren gültig sind ... der compiler das also eh umwandelt ...


alles in allem kein wirklich sauberer code ...

auch gehört Thread.start() NICHT in den konstruktor ... sondern an die stelle wo "Client" erzeugt wird ... also so z.b.

Java:
Client client=new Client(args...);
client.start();


noch als kleine anmerkung : seit ihr alle irgendwie zu unfähig zum googlen oder wollt ihr es einfach nicht ?
es gab gerade in letzter zeit vermehrt threads zum thema chat ... und : ES GIBT EIN TUTORIAL DAZU IN DIESEM FORUM
leute echt ... wenn ihr noch nicht mal googlen könnt ... dann lasst die finger vom programmieren ...
 

Zel2491

Aktives Mitglied
Habs inzwischen hinbekommen - Server bekommt vom Client ein Keyword und beendet dann meinen Socket.


@irgendjemand:

Alles schön und gut. Dann bin ich halt kein guter Programmierer - damit kann ich leben ;) Mein statischer getter ist sehr schlecht - das weiß ich selber - nur wenn ich eine Referenz erzeugen muss, muss ich meinen gesamten Code umschreiben, was ich vllt tun sollte, allerdings muss ich das Programm morgen abgeben - ich riskiere lieber einen Punktabzug (einen berechtigten), als dass ich durchfalle weil es dann nicht klappt. Wenn ich Zeit hab werd ich das wohl noch mal umschreiben. Ich bin nicht stolz auf diese Lösung - aber solange sie funktioniert tolleriere ich sie.

Natürlich habe ich Google befragt - aber wenn ich spezielle Fragen habe, die in den Chatbeispielen nicht auftauchen oder anders gelöst werden oder sonstwas - dann frage ich hier nach. Ach nochwas: nur weil ich deiner Meinung nach nicht googlen kann, werde ich bestimmt nicht die Finger vom programmieren lassen ;)

Und zum OOP: ja, das ist noch eine meiner Schwächen, das hat sich im Verlaufe dieses Chatprogramms aber wesentlich gebessert - auch wenn es noch nicht perfekt ist ;)



So genug gerechtfertigt - ich bin Java-Neuling und freue mich über hilfreiche Posts - so wie deiner einer war, auch wenn du etwas genervt "klangst" ;)
 
J

JohannisderKaeufer

Gast
Ein Schlüsselwort zum beenden ist nicht schlecht. Es gilt aber auch zu bedenken, daß die Verbindung einfach abreißen kann. (Kabel defekt, Firewall die gerade eingreift, Stromausfall, etc.). Da kommt dann kein Keyword mehr an. Deshalb auf jeden Fall, die Exception fangen, die beim Lesen und Schreiben auftreten kann und darauf reagieren, daß man z.B. eben diesen Client dann als Offline setzt.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Performanteste Kommunikationsmethode zwischen Client u. Server Netzwerkprogrammierung 4
L Socket Automatische Zuweisung von Server und Client Rolle Netzwerkprogrammierung 12
ExceptionOfExpectation Server/Client-Kommunikation Netzwerkprogrammierung 34
M Server-Client-System für Browsergame Netzwerkprogrammierung 5
Yonnig Threads mit Client/Server und GUI (laufend bis button-click) Netzwerkprogrammierung 9
J Client-Server und SOAP Netzwerkprogrammierung 23
L30nS RMI Aufruf einer Client-Methode von einem RMI-Server Netzwerkprogrammierung 3
T String von Client zu Server kommt nicht an Netzwerkprogrammierung 92
D WebSocket Server mit HTML Client und Java Server Netzwerkprogrammierung 5
D Server - Client Informationsaustausch, Möglichkeiten Netzwerkprogrammierung 3
H Socket Chat entwickeln mit Java Server Client Netzwerkprogrammierung 4
X Kann ich einen Client/Server verbindung hinkriegen die mir alle paar Sekunden die aktuellen Daten per Realtime zuschickt ? Netzwerkprogrammierung 9
D Slf4j - Logging - Client-Server Architektur Netzwerkprogrammierung 3
J client server mit nur einem PC Netzwerkprogrammierung 33
M Socket Nachricht von TCP-Client an Server schicken Netzwerkprogrammierung 12
M Socket Verbindung Matlab(Server) Java(Client) Netzwerkprogrammierung 1
R Socket FATAL EXCEPTION MAIN bei Socket based client/server app Netzwerkprogrammierung 2
G Server-Client IO Problem Netzwerkprogrammierung 6
I Socket Das erste Server-Client Programm Netzwerkprogrammierung 16
M Socket Server antwortet dem Client nicht Netzwerkprogrammierung 6
I Client/Server Kommunikation bei einem Spiel Netzwerkprogrammierung 4
E Objekte versenden, Client-Server Netzwerkprogrammierung 25
C Mini Client-Server-Anwendung funktioniert nicht Netzwerkprogrammierung 8
P Server als Client nutzen Netzwerkprogrammierung 8
D Socket Run Args Client/Server Socket Netzwerkprogrammierung 1
Cromewell Socket Multithreaded Server und Client Netzwerkprogrammierung 1
Y Client/Server/DB communication Netzwerkprogrammierung 3
JavaWolf165 Socket mit .writeUtf etwas vom Client zum Server schicken Netzwerkprogrammierung 13
P RMI Client Server Programm über Internet Netzwerkprogrammierung 2
brainless Client Server Kommunikation verschlüsseln Netzwerkprogrammierung 13
gamebreiti Socket Server / Client Anwendung Manipulation von Objekten durch Server Netzwerkprogrammierung 9
T Socket Server/Client Kommunikation Netzwerkprogrammierung 8
F Server Client Anwendung mit UDP Netzwerkprogrammierung 2
A RMI Wo treten Exceptions bei RMI Aufrufen auf? Auf Client oder auf Server? Netzwerkprogrammierung 3
A ByteBuffer - Client/Server Netzwerkprogrammierung 9
K C# Server - Android Client Netzwerkprogrammierung 0
P MIME-TYPE Erklaerung, Kommunikation zwischen Client und Server Netzwerkprogrammierung 3
J Sichere Kommunikation bei Server Client Netzwerkprogrammierung 3
T Frage zu Client-Server Applikation Netzwerkprogrammierung 2
H Socket Client/Server Socket Programmieren Netzwerkprogrammierung 1
M Theoretische Frage zu Server - Client Netzwerkprogrammierung 2
P HTTP Server / Client Netzwerkprogrammierung 1
E Thematik Client server Netzwerkprogrammierung 2
D Client/Server per Crossover Lan Kabel Netzwerkprogrammierung 1
S Client Server Connection Netzwerkprogrammierung 4
V erste Client - Server Anwendung, paar Fragen wie Socketverbindung checken usw. Netzwerkprogrammierung 4
S Sichere Server/Client Architektur Netzwerkprogrammierung 1
D Chat Server/mehre Client Netzwerkprogrammierung 9
I Server+Client Netzwerkprogrammierung 3
N Client am Server abmelden Netzwerkprogrammierung 0
F Server/Client Probleme Netzwerkprogrammierung 3
U Socket Instant Messanger (Server Linux, Client Windows) Netzwerkprogrammierung 1
Athena Grundsatzfragen zu Client-Server-Architektur / Matchmaking Netzwerkprogrammierung 1
A Problem beim Senden von Client zu Server Netzwerkprogrammierung 10
F Client Server DB Netzwerkprogrammierung 0
A Verständnisfrage Multi-Threaded Client/Server Netzwerkprogrammierung 5
F Tipps zum Thema Server/Client vie SOAP Netzwerkprogrammierung 0
F Socket Java - Server/Client simple Netzwerkprogrammierung 1
R Zeitliche Syncronisation Server - Client Netzwerkprogrammierung 0
S Server-Client: Image senden Netzwerkprogrammierung 2
C Multithreading Client / Server erklärt Netzwerkprogrammierung 11
P server - client verbindung (anfänger) Netzwerkprogrammierung 8
J Client Server - Serialisierung Netzwerkprogrammierung 8
Luk10 Server / Client: Clients speichern! Netzwerkprogrammierung 6
M allgemeine Frage über Server-Client-Kommunikation Netzwerkprogrammierung 5
K Client => Server Netzwerkprogrammierung 2
A ? Home-Network, Server/Client-Einrichtung Netzwerkprogrammierung 4
S Socket Server: ConnectionError vom Client erkennen Netzwerkprogrammierung 31
A Java Server - IOS Client Applikation Netzwerkprogrammierung 20
L Ratschlag zur Umsetzung einer client-server-Kommunikation Netzwerkprogrammierung 6
M RMI RMI Probleme zwischen Client und Server Netzwerkprogrammierung 5
J Erster Server-Client läuft auf lokalem Rechner problemlos. Zwei Rechner über das Internet nicht Netzwerkprogrammierung 8
N Client-Server-Datenbank Netzwerkprogrammierung 13
Kjubert Synchronisieren von Objekten über Client/Server - bester Weg? Netzwerkprogrammierung 7
B Client/Server Connection Problem Netzwerkprogrammierung 2
S Server Client Daten hin und herschicken Netzwerkprogrammierung 2
R Server zu Client Kommunikation Netzwerkprogrammierung 11
D TCP Verbindung (Java Client und Visual Basic Server) Netzwerkprogrammierung 12
S Socket Applet Client bekommt keine GLOBALE Verbindung zum Server Netzwerkprogrammierung 25
T Server und Client verbinden nicht Netzwerkprogrammierung 6
D Server Client Verbindung - Unexpected End of File - Invalid HTTP Response Netzwerkprogrammierung 4
V Socket UDP Server/Client Kommunikation sehr langsam Netzwerkprogrammierung 2
das-mo Client/Server sendet nicht Netzwerkprogrammierung 7
G Bild über Socket schicken - Client/Server Netzwerkprogrammierung 10
F TCP Server/Client Netzwerkprogrammierung 14
M Problem Client - Server Sockets: .ready() wird nie true! Netzwerkprogrammierung 6
Ollek Socket Sucher passende Server/Client Lösung für meine Anwendung Netzwerkprogrammierung 2
N eine klasse mit server & client Netzwerkprogrammierung 5
D RMI Gui auf client updaten basierend auf den Property Änderung des Models auf dem Server ohne polling Netzwerkprogrammierung 12
T Socket Client versucht zyklische Verbindung zum Server Netzwerkprogrammierung 4
S Socket Einfache Client/Server-Anwendung Netzwerkprogrammierung 11
F Socket Server/Client Kommunikation Netzwerkprogrammierung 4
X Problem mit Server-Client-Kommunikation Netzwerkprogrammierung 14
D Projektstruktur / Architektur (Client-Server) Netzwerkprogrammierung 9
P Socket IRC Client nicht kompatibel mit Server Netzwerkprogrammierung 30
F FTP Client mit Sockets - wann sagt der Server nichts mehr? Netzwerkprogrammierung 7
B RMI Server - Client - Aufteilung/Prinzip Netzwerkprogrammierung 11
N Server Client TCP IP Netzwerkprogrammierung 3
M Übersicht client/server implementationen und Frameworks (mithilfe gesucht!) Netzwerkprogrammierung 6
J ObjectStream Client/Server Netzwerkprogrammierung 7

Ähnliche Java Themen

Neue Themen


Oben