Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi socket fehler stoppen (https://www.delphipraxis.net/31135-socket-fehler-stoppen.html)

G G 4. Okt 2004 21:16


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.

Meta777 4. Okt 2004 23:12

Re: socket fehler stoppen
 
Delphi-Quellcode:
  try
    idhttp1.get('http://google.com');
  except
    on e:EIdSocketError do begin //IdException in Uses-Klausel eintragen!
      //do nothing...
    end;
  end;
hth

be blessed

Muetze1 5. Okt 2004 08:23

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

UweR 5. Okt 2004 11:49

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.

G G 5. Okt 2004 20:09

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

jaduke 11. Apr 2005 21:37

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

UweR 12. Apr 2005 10:09

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:
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.
mit Indy 9.0.14 ohne Probleme.

Muetze1 12. Apr 2005 12:32

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