![]() |
socket fehler stoppen
hi leute ich hab ein Prog geschrieben, dass mit idhttp über einen proxy sich verbinden soll, nun ist es so dass der proxy manchmal nicht online ist, aber wenn das programm nun ausgeführt wird und der proxy nicht online ist, wird eine socket-fehlermeldung zurückgegeben. Kann man diese Warungen unterdrücken, und das program einfach ganz normal weiter ausführen lassen
idhttp1.get('http://google.com'); try finally usw geht auch nicht, da kommt trotzdem der fehler. |
Re: socket fehler stoppen
Delphi-Quellcode:
hth
try
idhttp1.get('http://google.com'); except on e:EIdSocketError do begin //IdException in Uses-Klausel eintragen! //do nothing... end; end; be blessed |
Re: socket fehler stoppen
Moin!
@Meta777: Was soll denn da ein Except Block anstatt einem Finally Block anderes bewirken? Das Problem liegt doch grundlegend woanders... @G G: 2 Möglichkeiten die mir zu dem Problem einfallen: 1. Hast du bedacht, dass Delphi die Exception trotzdem anzeigt, wenn das Programm unter Delphi gestartet wird? (Trotz eines Try/Except bzw. Try/Finally Blockes) 2. Sockets arbeiten eigentlich immer mit Threads, daher kann die Exception asynchron zu dem Get Aufruf auftreten. Mit anderen Worten: Du klammerst zwar den Aufruf von Get() in einen solchen Try/.... Block, aber die Exception passiert später. Bei den Indy Komponenten kenne ich mich gar nicht aus, aber die TServerSocket und TClientSocket haben für den Fall eines Fehlers ein OnError CallBack mit dem man(n) Exceptions/Fehler anzeigen kann bzw. die Fehlerausgabe unterdrücken kann... MfG Muetze1 |
Re: socket fehler stoppen
Hallo
@Muetze1 Ein finally und ein except-Block verhält sich schon grundsätzlich verschieden. By try - finally wird nur dafür gesorgt das das was nach finally kommt auch auf jeden Fall durchlaufen wird, die Exception wird aber noch nach "oben", also wenn kein except-Block mehr kommt bis zum User, weitergeleitet. Der try-except-Block fängt den Fehler komplett ab und man bekommt quasi nichts mehr von ihm mit. Und die Indy-Komponenten hauen dir tatsächlich den Fehler direkt um die Ohren und es gibt keinen OnError-Event wie bei TServer- oder TClient-Socket. |
Re: socket fehler stoppen
nicht streiten leute :-D
Also der code von meta777 hat genau des gemacht was ich wollte, super danke für die vielen hilfen |
Re: socket fehler stoppen
Hi,
hab auch so ein Problem mit dem EIdSocketError... Habe in die uses-Klausel die IdException eingebunden aber er sagt mir trotzdem das EIdSocketError ein "nicht deklarierter Bezeichner" ist. Hier ist mein Program Code
Delphi-Quellcode:
procedure TWebSpider.Nachricht_holen;
VAR tmp : String; BEGIN IF NOT (Length(Server_IP.Text) = 0) THEN BEGIN try IdFTP1.Host := 'Server_IP.Text'; IdFTP1.Port := 21; tmp := copy(RadioGroup1.Items[RadioGroup1.ItemIndex],2, Length(RadioGroup1.Items[RadioGroup1.ItemIndex])); IdFTP1.Username := tmp; IdFTP1.Password := 'Gote_San_seine_Nachricht'; IdFTP1.Connect; IF IdFTP1.LastCmdResult.NumericCode < 400 THEN BEGIN IdFTP1.Get('motd.txt','motd.txt'); IdFTP1.Quit; Memo1.Lines.LoadFromFile('motd.txt'); Memo1.Visible := TRUE; DeleteFile('motd.txt') END ELSE ShowMessage('Bitte ueberpruefen Sie Ihre Eingaben!'); IF NOT FileExists('motd.txt') THEN ShowMessage('Es ist ein Fehler ' +' unbekannter Art aufgetr' +'eten! Bitte ueberpruefen' +'Sie Ihre Eingaben!'); except on EIdSocketError DO ShowMessage('Bitte ueberpruefen Sie Ihre Eingaben!'); END END ELSE ShowMessage('Bitte geben Sie die Server-IP ein!') END; kann mir wer helfen??? danke schon mal |
Re: socket fehler stoppen
Hallo Jaduke,
das sollte so eigentlich funzen, hab es gerade mal ausprobiert und bei mir mosert Delphi nicht rum. Welche Indy-Version hast du den im Einsatz? Bei mir geht der folgende Code:
Delphi-Quellcode:
mit Indy 9.0.14 ohne Probleme.
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, StdCtrls, IdException; type TForm1 = class(TForm) Button1: TButton; IdTCPClient1: TIdTCPClient; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin try IdTCPClient1.Connect(1000); except on e : EIdSocketError do begin MessageDlg(E.Message, mtError, [mbOK], 0); end; end; end; end. |
Re: socket fehler stoppen
Moin!
Die Exception ist in der Unit IdException deklariert, die der Fragesteller nicht eingebunden hat, der Nachfrager aber schon... MfG Muetze1 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:07 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