![]() |
Meldung vom Socket - erfolgreich geschlossen
hallo zusammen
ich habe da was mit den socket programmiert. die anwendung läuft einwandfrei.... nur manchmal kommt die meldung "die verbindung wurde erfolgreich geschlossen" eine solche meldung habe ich aber nicht in das programm aufgenommen und es kommt auch nicht immer wenn ich die verbindung beende. eben nur manchmal... weiß jemand woran das liegt?? try except habe ich schon "eingebunden". die meldung kommt aber trozdem. meiner aufffasung nach deshalb weil es ja in engerem sinne kein fehler ist... den ich abfangen will sondern eben nur eine meldung. und wie kann ich solche meldungen unterdrücken?? gruß delphicus |
Re: Meldung vom Socket - erfolgreich geschlossen
Dazu könntest du ruhig mal den relevanten (!) Code-Abschnitt zeigen, damit man sehen kann, wie die Verbindung beendet wird und wo der Fehler liegen könnte.
MfG Binärbaum |
Re: Meldung vom Socket - erfolgreich geschlossen
Das ist eine Exception der Indys. Die Indy entwickler nutzen Exceptions nicht nur wenn Aufrufe fehlgeschlagen sind, sondern auch um erfolgreiche Aufrufe zu signalisieren. Robert Marquardt hat dazu mal was geschrieben. Du kannst diese Exception unterdrücken in dem du in den Debugger Optionen bei den Sprachexeptions die entsprechend Exception aufnimmst bei den zu irgnorirenden Exceptions. such einfach mal im Forum nach
![]() |
Re: Meldung vom Socket - erfolgreich geschlossen
hier mal nen bisschen code. ich hatte oben darauf verzichtet, weil die anwendung ja eigendlich läuft....
Delphi-Quellcode:
luckie wird die meldung auch dann unterdrückt wenn das programm nicht im debugger läuft? ich gehe erstmal auf die suche nach "verbindung wurde erfolgreich geschlossen" Try ClientSocket1.Open; ClientSocket1.Socket.SendText(TimeToStr(TIME)+' '+TEMPSTR); ClientSocket1.Close; except end; & danke für die schnellen antworten |
Re: Meldung vom Socket - erfolgreich geschlossen
In der zu den Indy Komponenten gehörenden Unit IdExceptions kannst Du nachschauen, welche unterschiedlichen Exceptions es dort gibt, und in Deinem Programm könntest Du mit diesem Wissen gezielt auf ein Eintreten der Exceptions reagieren.
EIdConnClosedGracefully is raised when remote side closes connection normally EIdConnClosedGracefully = class(EIdSilentException); Bei einer Exception handelt es sich nicht immer um einen Fehler, sondern eben um eine Ausnahmesituation, so auch im Falle der Exception EIdCOnnectionCLosedGracefully. Generell kann man natürlich jede Exception selber überwachen:
Delphi-Quellcode:
Gruss,try ClientSocket1.Open; ClientSocket1.Socket.SendText(TimeToStr(TIME)+' '+TEMPSTR); ClientSocket1.Close; except on EIdConnClosedGracefully do begin // Hier kannst Du was mit der Exception anstellen, ohne dass sie automatisch angezeigt wird end; on EIdNotConnected do begin // Hier ebenfalls end; end; Bernhard |
Re: Meldung vom Socket - erfolgreich geschlossen
Moin!
Wie kommt ihr nur alle auf die Indy Komponenten? ClientSocket1 sieht für mich eher nach einer TClientSocket Instanz aus. Diese kann man noch so oft in einem Try/Except Block packen, das bringt meist nix, da der Socket in einem Thread läuft und somit auch die Exceptions unsynchron auftreten. Dafür hat der TClientSocket auch extra ein OnError Event um mit Exception umgehen zu können und diese auch zu unterdrücken (ErrorCode auf 0 setzen, siehe Hilfe). Auch ist es so falsch programmiert in dem Beispiel. Wenn man die Methode Open aufruft, dann fängt der Socket an sich zu verbinden und versucht eine Verbindung aufzubauen - dieses wird aber in dem Thread erledigt und daher passiert das unsynchron zum VCL Hauptthread und somti wird danach SendText() aufgerufen obwohl er vielleicht noch beim verbinden ist. Es gibt extra ein OnConnect bzw. ein OnClientConnect um zu signalisieren wann die Verbindung aufgebaut wurde. Ein solches lineares aufrufen wie in dem Beispiel ist völliger Blödsinn und klappt meistens nur, wenn Client und Server auf dem lokalen Rechner laufen, dieser schnell genug ist und nicht ausgelastet. Selbst bei 2 Rechnern im lokalen LAN haut dies vielleicht öfters noch hin, aber es gibt keine Garantie. Über das Internet bzw. VPN oder ein anderes WAN haut der Code garantiert nicht mehr hin... MfG Muetze1 |
Re: Meldung vom Socket - erfolgreich geschlossen
Mensch... stimmt. Da bin ich wohl zu vorschnell auf den Indy-Zug aufgesprungen. :roll:
|
Re: Meldung vom Socket - erfolgreich geschlossen
ich habe jetzt das
Code:
in das ClientSocketConnect-Ereignis gepackt mal sehen ob es jetz geht.
ClientSocket1.Socket.SendText(TimeToStr(TIME)+' '+TEMPSTR);
ClientSocket1.Close; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz