Problem bei Programmierung von Chat - Disconnecten von Clienten
-
Hallo.
Ich habe ein kleines Problem mit meinem Chat. Er läuft bisher ziemlich rund, man kann auch schon mit mehreren Users connecten. Allerdings scheint sich kein Client zu disconnecten.... Ich rufe beim Beenden des Clients jeweils Socket.close () auf.
Allerdings merkt das der Server nicht. Ich habe es mich isBound, isClosed und isConnected ausprobiert. In keinem Fall merkt er, dass sich der Client beendet hat.
Verwende ich da die falschen Methoden?
-
Hmm ich denke er würde es nur dann merken wenn er etwas über den Socket schickt und dies fehlschlägt. Womöglich musst du dein Protokoll noch ein wenig anpassen? So dass dein Disconnect erst mal den Client aus 'ner Liste austrägt und dann geclosed wird?
-
Naja,
genau das wollte ich vermeiden. Ich müsste vom client nen command schicken lassen. Ich dachte man könnte das so machen, dass der Server das automatisch merkt.
Gruß Sebastian
-
Moin Moin
Hälst du die Verbindung den immer aufrecht oder nur solange die Nachricht übertragen wird?
cu CodeHure
-
Hmmm ich will euch mal ein wenig beschreiben wie ich des mache:
Auf dem Server gibt es zunächst nur den ServerSocket, der wartet in einer Endlosschleife und erzeugt einen neues Userobjekt von der Klasse User, falls dieser angenommen wird. Die Klasse user startet dann einen Thread welcher dem Client die Information sendet, dass er nun connected ist und verfällt ab dann auch in eine Endlosschleife. Ich schicke hier nur Message-Objekte über nen ObjectOutputStream, und zwar vom Typ Message (eine weitere Klasse die ne HashMap für die User, einen Messagestring und einen Commandstring beinhaltet), wenn eine entsprechende Messageinstanz empfangen wird. Dafür ist der Server dann zuständig.
Also wird die Verbindung die ganze Zeit aufrecht gehalten. Im Prinzip habe ich dann nicht nur eine Verbindung, sondern soviele, wie halt User connected sind.
Gruß Sebastian
-
Hi
wie hast du die endlosschleife programiert? so was sollte einen Ausgang haben. (sonstst stirbt der thread nie und der user hat sich auch für dein prog ne diskonnected da der thread noch leuft ) zumindestens dann wenn er nix mehr von der gegenstelle empfängt. Aber das problem hatten wir schon einmal.
guck dich mal den thread an vileicht hilft das ein wenig.
http://www.c-plusplus.net/forum/viewtopic.php?t=92105&highlight=chatgruss Termite
-
naja es ist keine enddlosschleife
while (isInterrupted == false)
{
// empfange
// mache irgendwas, zum beispiel bei bestimmten command strings (userlist, kick, usw.)
// rege server an nachricht an alle zu senden
}
-
fluxy schrieb:
Naja,
genau das wollte ich vermeiden. Ich müsste vom client nen command schicken lassen. Ich dachte man könnte das so machen, dass der Server das automatisch merkt.
Das ist nicht sinnvoll. So kann der Server nicht unterscheiden, ob die Verbindung einfach getrennt wurde, oder ob du planmäßig dem Chat verlassen hast.
-
hi.
guck doch mal auf http://java.seite.net/chat/index.html da ist eine sehr einfacher chat beschrieben der glaub ich auch mit deinem problem fertig wird.