AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

IdTCPClient Komponente

Ein Thema von Jerry · begonnen am 25. Nov 2011 · letzter Beitrag vom 7. Dez 2011
Antwort Antwort
Jerry

Registriert seit: 24. Feb 2005
Ort: Schweiz/Thurgau
138 Beiträge
 
Delphi 2010 Professional
 
#1

IdTCPClient Komponente

  Alt 25. Nov 2011, 10:21
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:
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;
Es funktioniert einwandfrei, aber beim zweiten Connect also bei zweiten mal drücken auf den Button erschein jedesmal
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.
  Mit Zitat antworten Zitat
Jerry

Registriert seit: 24. Feb 2005
Ort: Schweiz/Thurgau
138 Beiträge
 
Delphi 2010 Professional
 
#2

AW: IdTCPClient Komponente

  Alt 25. Nov 2011, 14:58
nobody out there...?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#3

AW: IdTCPClient Komponente

  Alt 25. Nov 2011, 17:10
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;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#4

AW: IdTCPClient Komponente

  Alt 25. Nov 2011, 22:09
leicht OT, aber warum unterscheidest Du die Exceptionfälle wenn alle gleich behandelt werden?
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Jerry

Registriert seit: 24. Feb 2005
Ort: Schweiz/Thurgau
138 Beiträge
 
Delphi 2010 Professional
 
#5

AW: IdTCPClient Komponente

  Alt 27. Nov 2011, 11:57
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!
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#6

AW: IdTCPClient Komponente

  Alt 27. Nov 2011, 12:35
on E: Exception do würde alle abfackeln, OT heißt Off Topic, meine Antwort hatte mit Deinem Problem nicht wirklich etwas zu tun....
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#7

AW: IdTCPClient Komponente

  Alt 27. Nov 2011, 13:23
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;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Jerry

Registriert seit: 24. Feb 2005
Ort: Schweiz/Thurgau
138 Beiträge
 
Delphi 2010 Professional
 
#8

AW: IdTCPClient Komponente

  Alt 7. Dez 2011, 07:48
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#9

AW: IdTCPClient Komponente

  Alt 7. Dez 2011, 10:17
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...
Eben nicht, denn du machts immer genau das Selbe, egal welcher Fehler.
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:
except
  on E: Exception do
    WriteLn(E.Message);
end;
Alternativ:
Delphi-Quellcode:
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;
Wenn du wirklich wissen willst, welcher Fehler es genau war, dann eher so:
Delphi-Quellcode:
except
  on E: Exception do
    WriteLn(E.ClassName, ': ', E.Message);
end;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort


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 21:53 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