![]() |
IdTCPClient Komponente
Hallo zusammen
Ich habe eine kleines Programm geschrieben, dass den Port testen soll, ob dieser connected werden kann. Auf einem Button habe ich folgenden Code hinterlegt:
Delphi-Quellcode:
Es funktioniert einwandfrei, aber beim zweiten Connect also bei zweiten mal drücken auf den Button erschein jedesmal
procedure Tfrm_POP3SMTPTester.Button1Click(Sender: TObject);
begin try IdTCPClient.Host := edt_PortHost.Text; IdTCPClient.Port := StrToInt(edt_PortNr.Text); IdTCPClient.ConnectTimeout := 2000; IdTCPClient.Connect; // (4000); if IdTCPClient.Connected then begin showmessage('Connect hergestellt!'); IdTCPClient.Disconnect; end; except on E: EIdTextInvalidCount do Writeln(E.Message); on E: EIdMessageCannotLoad do Writeln(E.Message); on E: EIdPOP3Exception do Writeln(E.Message); on E: EIdTextInvalidCount do Writeln(E.Message); on E: EIdMessageCannotLoad do Writeln(E.Message); on E: EIdDoesNotSupportAPOP do Writeln(E.Message); on E: EIdUnrecognizedReply do Writeln(E.Message); on E: EIdTLSClientException do Writeln(E.Message); on E: EIdTLSClientSSLIOHandlerRequred do Writeln(E.Message); on E: EIdTLSClientCanNotSetWhileConnected do Writeln(E.Message); on E: EIdTLSClientTLSNotAvailable do Writeln(E.Message); on E: EIdTLSClientTLSNegCmdFailed do Writeln(E.Message); on E: EIdTLSClientTLSHandShakeFailed do Writeln(E.Message); on E: EIdTLSServerException do Writeln(E.Message); on E: EIdTLSClientCanNotSetWhileActive do Writeln(E.Message); end; if IdTCPClient.Connected then IdTCPClient.Disconnect; end; die Meldung "Already Connected". Was mache ich hier falsch? Ich gebe ja den Befehl IdTCPClient.Disconnect ab...? Ebenfalls erschein im Debug-Modus vor der Fehlerausgabe die Meldung: Im Projekt test.exe ist eine Exeption der Klasse EIdAlreadyConnected mit der Meldung 'Already connected' aufgetreten. (Wie gesagt aber nur ab dem zweiten mal bei Drücken des Buttons) Vielen Dank für Inputs... Grüsse Jerry. |
AW: IdTCPClient Komponente
nobody out there...? :-)
|
AW: IdTCPClient Komponente
Versuch mal:
Delphi-Quellcode:
begin
try IdTCPClient.Disconnect; IdTCPClient.Host := edt_PortHost.Text; Indy, DBX, DataSnap und Co. haben gerne mal Probleme, wenn die Connection (von extern) getrennt wurde, bzw. wenn sie nicht richtig aufgebaut werden konnte. Connected liefert dann True, obwohl es getrennt ist.
Delphi-Quellcode:
if IdTCPClient.Connected then
IdTCPClient.Disconnect; |
AW: IdTCPClient Komponente
leicht OT, aber warum unterscheidest Du die Exceptionfälle wenn alle gleich behandelt werden?
|
AW: IdTCPClient Komponente
Hallo Bummi
Danke für Deine Antwort. Was heisst OT? Ja ich muss zugeben bei der Exeption bin ich mir nicht sicher ob das korrekt ist so.. Hast du mir hier einen besseren Tipp? Dankeeee! :-) |
AW: IdTCPClient Komponente
Delphi-Quellcode:
würde alle abfackeln, OT heißt Off Topic, meine Antwort hatte mit Deinem Problem nicht wirklich etwas zu tun....
on E: Exception do
|
AW: IdTCPClient Komponente
Jupp, die On-Sektionen entsprechen einer IS-Prüfung und die prüft, ob mindestens dieser Type vorliegt (Type + alle Nachfahren)
PS: Da dort der Else-Block fehlt, würden alle nicht angegebenen Exceptions einfach übersehn/ignoriert. Da Exception der Basistyp aller Exceptions-Klassen ist, würde der alle Exceptions abfangen.
Delphi-Quellcode:
except
on E: Exception do WriteLn(E.ClassName, ': ', E.Message); // eventuell sogar noch den Exception-Typen mit ausgeben end; |
AW: IdTCPClient Komponente
hallo vielen Dank für die Inputs...
Eine Frage wollte ich noch beantworten: leicht OT, aber warum unterscheidest Du die Exceptionfälle wenn alle gleich behandelt werden? Ich habe viel mit pop3 und SMTP und Ports zu tun. Ich musste mir ein Programm schreiben, das POP3 und SMTP und Ports prüft. Ich musste meine Kunden davon überzeugen, dass Ihr Mailaccount ein Problem hat. Wenn innerhalb einer Application die recht gross ist, der Mailzugnang nicht funktioniert hat, dann meinen die Kunden immer, es wäre das Programm selber das ein Problem hat. Ich konnte die Kunden nur immer schwer davon überzeugen, dass das Problem bei Ihrem Provider/Mailserver liegt. Mit dieser kleinen unabhängigen Applikation kann ich den Kunden immer davon überzeugen, dass es nichts mit der eigentlichen Applikation zu tun hat, sondern es an seinem Mailprovider / Mailserver liegt. Die verschiedenen Exceptionfälle geben mir eben immer den entsprechenden Fehler aus. z.B: Login faild oder User unknown usw. Jedenfalls funktioniert es so recht gut... :-) Allen einen schönen Tag! Gruss Jerry |
AW: IdTCPClient Komponente
Zitat:
Und dazu könntest du auch Fehler übersehn, falls diese nicht vorkommen, in deiner Liste. Folgendes macht also genau das Gleiche, nur daß es keine Exceptions mehr übersieht.
Delphi-Quellcode:
Alternativ:
except
on E: Exception do WriteLn(E.Message); end;
Delphi-Quellcode:
Wenn du wirklich wissen willst, welcher Fehler es genau war, dann eher so:
except
on E: EIdTextInvalidCount do Writeln(E.Message); ... on E: EIdTLSClientCanNotSetWhileActive do Writeln(E.Message); on E: Exception do WriteLn(E.Message); // das, was du sonst übersehn könntest else WriteLn('ganz komischer Fehler'); // kommt aber "eigentlich" nie vor, da Exceptions ja eine Exceptionklasse besitzen und diese "immer" vom Typ Exception abstammen sollt. end;
Delphi-Quellcode:
except
on E: Exception do WriteLn(E.ClassName, ': ', E.Message); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:06 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