Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Winsock API disconnect oder Fehler abfangen (https://www.delphipraxis.net/98965-winsock-api-disconnect-oder-fehler-abfangen.html)

Zacherl 4. Sep 2007 18:44


Winsock API disconnect oder Fehler abfangen
 
Hey,

kann ich mir mit der winsock API irgendwie ein OnError Event basteln so wie es beispielsweise in der TClientSocket Klasse enthalten ist?

Gruß Zacherl

nitschchedu 4. Sep 2007 19:10

Re: Winsock API disconnect oder Fehler abfangen
 
In grunde genohmmen schon ... aber dann müsstest du das in Klassen aufbauen sonst würd das nix.

Zacherl 4. Sep 2007 20:34

Re: Winsock API disconnect oder Fehler abfangen
 
Geht mir jetzt nicht speziell um ein Event, sondern mehr um die Art und Weise wie ich rausbekommen kann, ob die Verbindung überhaupt noch steht.
Wird mein Server beispielsweise über den Taskmanager abgeschossen, wird nicht ordnungsgemäß "disconnect" aufgerufen und mein Client bekommt gar nichts mit :D

nitschchedu 4. Sep 2007 21:35

Re: Winsock API disconnect oder Fehler abfangen
 
Naja da du einen brauchst Thread prüfst du mit "ioctlsocket" ob was ankommt, sollte in der Zeit der Socket disconnecten gibt die Funktion ein Fehler Code zurück, den wertest du einfach nur aus.

Zacherl 5. Sep 2007 06:16

Re: Winsock API disconnect oder Fehler abfangen
 
Danke dir, ich werde das mal versuchen :)

oki 5. Sep 2007 06:42

Re: Winsock API disconnect oder Fehler abfangen
 
Hi zacherl,

imho ist es so, dass eine Socket-Verbindung nicht automatisch prüft, ob der verbundene Teilnehmer noch aktiv ist. Besteht eine connection, so gehen alle Teilnehmer davon aus, dass diese auch aktiv ist. Eine aktive Benachrichtigung des Beendens erfolgt nur über den disconnect. Stürzt ein Teilnehmer ohne disconnect ab, so werden alle anderen hiervon nicht informiert. Ich habe dieses Problem über ein eigenes Benachrichtigungsprotokoll (ähnlich Ping) gelöst. Hast du nicht die Möglichkeit so etwas zu implementieren, besteht zusätzlich die Einrichtung eines Timeout. Bekommt eine Socket eine festgelegte Zeiteinheit keine Daten (Timeoutzeit), wird die Verbindung aktiv getrennt.
Ich muß aber auch zugeben, dass ich mit ioctlsocket noch nicht gearbeitet habe.

Gruß oki

Zacherl 5. Sep 2007 09:03

Re: Winsock API disconnect oder Fehler abfangen
 
Ich hatte es mal so gelöst, dass ich einfach immer nach einiger Zeit irgendwelche Müll Daten versucht habe zu schicken und wenn das Socket einen Fehlercode zurückgegeben hat, wusste ich, dass die Verbindung abgebrochen ist. Allerdings hat das meinen regulären Datenverkehr gestört und war zudem noch recht instabil ..
Ich werde es später, wenn ich zu Hause bin erstmal mit ioctlsocket versuchen.

oki 5. Sep 2007 09:55

Re: Winsock API disconnect oder Fehler abfangen
 
Zitat:

Zitat von Zacherl
Ich hatte es mal so gelöst, dass ich einfach immer nach einiger Zeit irgendwelche Müll Daten versucht habe zu schicken und wenn das Socket einen Fehlercode zurückgegeben hat, wusste ich, dass die Verbindung abgebrochen ist.

Meine Erfahrung ist, dass für eine "nicht ordnungsgemäß" getrennte Verbindung ebend genau keine Fehlermeldung kommt. Imho geht es nur so, dass z.B. der Client in definierten Zeitabständen eine Info (zum Bsp. "ping" oder anderer Identifier) an den Server sendet. Erhält der Server nach Timeout keine Message vom Client, wird die gehaltene Socketverbindung getrennt. Das gleiche gilt auch umgekehrt. Nach entsprechenden disconnectes beider Seiten muß der Client versuchen eine neue Verbindung zum Server aufzubauen. Wenn das dann nicht klappt, kommt eine Fehlermeldung auf die man entsprechend reagieren kann.

Das heisst also, der Server wartet auf ein connect und trennt bei Inaktivität. Der Client macht das gleiche, versucht aber nach Disconnect eine neue Verbindung zu etablieren.

Gruß oki

Zacherl 5. Sep 2007 14:29

Re: Winsock API disconnect oder Fehler abfangen
 
Jaja, ich glaube wir reden aneinander vorbei :D Meine Erfahrungen haben das selbe gezeigt. Ich meine nur einen Lösungsansatz von mir, in welchem ich zwar keine richtige PING PONG Funktion eingebaut hatte, sondern ich habe einfach versucht irgendwas an den Server zu schicken.
In diesem Falle hat der Client aber gemerkt, wenn der Server geschlossen wurde und einen Errorcode zurückgegeben. Dies allerdings erst im Falle eines Datentransfers. Von alleine kommt überhaupt keine Fehlermeldung.

Um 7 bin ich ca wieder zu Hause, dann sehe ich mir mal die ioctlsocket API an und erstatte Rückmeldung :)

Zacherl 5. Sep 2007 19:28

Re: Winsock API disconnect oder Fehler abfangen
 
Habe jetzt folgendes versucht:
Delphi-Quellcode:
IOCtlSocket(FSocket, FIONREAD, dwSize)
Das liefert mir allerdings auch keinen Fehler, wenn der Server abgeschossen wurde.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:05 Uhr.
Seite 1 von 2  1 2      

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