AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Winsock API disconnect oder Fehler abfangen
Thema durchsuchen
Ansicht
Themen-Optionen

Winsock API disconnect oder Fehler abfangen

Ein Thema von Zacherl · begonnen am 4. Sep 2007 · letzter Beitrag vom 5. Sep 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

Winsock API disconnect oder Fehler abfangen

  Alt 4. Sep 2007, 18:44
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
  Mit Zitat antworten Zitat
nitschchedu

Registriert seit: 24. Mär 2006
300 Beiträge
 
Delphi 7 Professional
 
#2

Re: Winsock API disconnect oder Fehler abfangen

  Alt 4. Sep 2007, 19:10
In grunde genohmmen schon ... aber dann müsstest du das in Klassen aufbauen sonst würd das nix.
Programmieren ..... .
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

Re: Winsock API disconnect oder Fehler abfangen

  Alt 4. Sep 2007, 20:34
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
  Mit Zitat antworten Zitat
nitschchedu

Registriert seit: 24. Mär 2006
300 Beiträge
 
Delphi 7 Professional
 
#4

Re: Winsock API disconnect oder Fehler abfangen

  Alt 4. Sep 2007, 21:35
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.
Programmieren ..... .
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#5

Re: Winsock API disconnect oder Fehler abfangen

  Alt 5. Sep 2007, 06:16
Danke dir, ich werde das mal versuchen
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Winsock API disconnect oder Fehler abfangen

  Alt 5. Sep 2007, 06:42
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
42
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#7

Re: Winsock API disconnect oder Fehler abfangen

  Alt 5. Sep 2007, 09:03
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.
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Winsock API disconnect oder Fehler abfangen

  Alt 5. Sep 2007, 09:55
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
42
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#9

Re: Winsock API disconnect oder Fehler abfangen

  Alt 5. Sep 2007, 14:29
Jaja, ich glaube wir reden aneinander vorbei 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
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#10

Re: Winsock API disconnect oder Fehler abfangen

  Alt 5. Sep 2007, 19:28
Habe jetzt folgendes versucht:
IOCtlSocket(FSocket, FIONREAD, dwSize) Das liefert mir allerdings auch keinen Fehler, wenn der Server abgeschossen wurde.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:05 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