Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Client disconnecten (als Server) (https://www.delphipraxis.net/33265-client-disconnecten-als-server.html)

Pseudemys Nelsoni 4. Nov 2004 08:02


Client disconnecten (als Server)
 
moin,

ich schreibe gerade einen ircd, diesem muss man eine mail(warum auch immer) übergeben damit man auch akzeptiert wird, ansonsten sollte man disconnected werden... ich habe das ganze so gemacht:

Delphi-Quellcode:
  if ConArray[ConArrayIdx].email = '' then
  begin
    AClient.SendText(Format('ERROR :Closing Link: %s[%s] (email needed to connect!)', [ConArray[ConArrayIdx].nick, AClient.RemoteHost]) + #13#10); // Nachricht senden
    MeinServer.Socket.Disconnect(AClient.SocketHandle); // Client disconnecten
    FreeUserData(ConArrayIdx); // Den User mit samt den Daten aus dem ConnectionArray löschen
    exit;
  end;
wenn ich nun mit mirc darauf connecte funktioniert es manchmal wie es soll und manchmal auch nicht...

So sieht es aus wenn alles richtig verlaufen ist:

Zitat:

* Connecting to 127.0.0.1 (6667)
Closing Link: pseudemys[localhost] (email needed to connect!)
* Disconnected
aber manchmal sieht es auch so aus:

Zitat:

* Connecting to 127.0.0.1 (6667)
Closing Link: pseudemys[localhost] (email needed to connect!)
* [10053] Software caused connection abort << ?
* Disconnected
oder manchmal sieht man auch die message gar nicht:

Zitat:

* Connecting to 127.0.0.1 (6667)
* [10054] Connection reset by peer
* Disconnected
am mirc liegt es natürlich nicht (denn auf anderen servern geht es natürlich normal...).

also muss der fehler da in meinen 4 zeilen sein... nur wo?

Stevie 4. Nov 2004 11:30

Re: Client disconnecten (als Server)
 
Moin,

das Problem an der Sache ist, dass eine Serverseitge Verbindungsunterbrechung genau genommen beim Client nicht sauber durchgeführt wird. Es nicht so, dass dem Client gesagt wird: "Hey, sofort die Verbindung unterbrechen!" oder "Die Verbindung wird jetzt unterbrochen!", sondern sie wird einfach gekappt und fertig. Das wird dann durch eine Exception beim Client angefangen. Deshalb wird für diesen Fall auch kein OnDisconnected-Event beim Client aufgerufen, sondern nur dann, wenn die Verbindung client-seitig beendet wird. Aber wenn vorher eine Nachricht geschickt wurde, ist nicht sicher, dass die Nachricht auch vor der Verbindungstrennung beim Client ankommt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:21 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz