![]() |
Indy TCP Client Exception
Hallo allerseits
ich stehe wieder mal wie der Esel am Berg. Ich habe folgende ziemlich einfache Unit:
Code:
Auf dem Form ist bloss ein TIdTCPCLient. Die Unit habe ich elf Applikationen eingebunden und funktioniert einwandfrei. Bei einer weiteren Applikation bekomme ich aber auf dem TCPClient.Host := inet_ntoa(QIP);
unit Client1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, StdCtrls, WinSock, IdCustomTCPServer, IdTCPServer; type TALiz = class(TForm) TCPClient : TIdTCPClient; function GetLizfromServer(SW: String; Liz: String; PKey: String; IP: String): string; end; var ALiz: TALiz; implementation {$R *.dfm} uses ping; function TALiz.GetLizfromServer(SW: String; Liz: String; PKey: String; IP: String): string; var Puffer : string; var VErr : Boolean; var QIP : in_addr; begin if GetIPByName('www.schneider-it-gmbh.dyndns.org',QIP) then begin TCPClient.Host := inet_ntoa(QIP); Result := ''; VErr := False; try TCPClient.Connect; Puffer := SW + '#' + PKey + '#' + Liz + '#' + IP; if TCPClient.Connected then begin TCPClient.GetResponse(100); if TCPClient.LastCmdResult.Text.Strings[0] = 'Server ready' then begin TCPClient.SendCmd(Puffer, 200); Puffer := TCPClient.LastCmdResult.Text.Strings[0]; if copy(Puffer,1,4) <> 'NOGO' then Result := Puffer else begin ...... end; end else Result := 'Verbindungsfehler 3'; end; TCPClient.IOHandler.Close; TCPClient.Disconnect; except Result := 'Verbindungsfehler 1'; end; end else Result := 'DNS-Fehler!'; end; end. konstant eine Access Violation Exception. Und an der IP-Ermittlung liegt es nicht: Auch so etwas führt zum Fehler: TCPClient.Host := '192.168.0.11'. Hat irgend jemand eine Idee, weshalb das 11 mal funktioniert, resp. was die Ursache sein könnte, weshalb es beim 12. mal nicht funktioniert? Danke für Eure Hinweise |
AW: Indy TCP Client Exception
@hesch21:
Hast Du die Möglichkeit das Auftreten der Exception zu debuggen ? Es würde schon einiges weiterhelfen zu wissen an welcher Stelle(Zeile) der Fehler auftritt. Greetz Data |
AW: Indy TCP Client Exception
Delphi-Quellcode:
Setze mal die Asserts in deinen code und nicht vergessen in den Projektoptionen die Asserts zu aktivieren.
function TALiz.GetLizfromServer(SW: String; Liz: String; PKey: String; IP: String): string;
... begin // Sicherheitsprüfungen Assert(Assigned(self), 'kein TALiz - Objekt'); Assert(Assigned(self.TCPClient), 'kein TCPClient - Objekt'); |
AW: Indy TCP Client Exception
Vorab Danke für Eure Antworten.
@ Data: Ich glaube, ich habe ziemlich klar beschrieben, auf welcher Zeile mit welcher Exception das Programm aussteigt. @ sx2008: Wenn ich die beiden Asserts einbaue, bekomme ich die Exception auf dem ersten Assert. Hier der exakte Text aus dem MAD-Bugreport: exception class : EAssertionFailed exception message : kein TALiz - Objekt (S:\Client1.pas, Zeile 30). Aber was das nun bedeutet, resp. weshalb das TALiz-Objekt nicht vorhanden (assigned) ist, ist mir nach wie vor ein Rätsel. |
AW: Indy TCP Client Exception
Zitat:
Zitat:
warum Dein TALiz-Objekt nicht vorhanden (assigned) ist. Wird die function GetLizfromServer etwa von irgendwelchen Timern / Form-Events aufgerufen, so das diese eventuell eintreten könnten, bevor Dein Objekt erzeugt ist ? Greetz Data |
AW: Indy TCP Client Exception
Hallo DataCool
natürlich läuft das Ding mit dem Debugger. Mal kurz um was es geht. Die Unit übermittelt dem (meinem) Server Lizenzierungsdaten welche dieser prüft. Je nach Ergebnis kommt vom Server ein Lizenzierungsschlüssel oder ein 'No Go' mit einem Fehlercode zurück. Angestossen wird das im Hauptprogramm über einen Button (also keinen Automatismus über einen Timer oder so). Der Fehler tritt erst auf, wenn ich die Funktion im Hauptprogramm über den Button aufrufe. Die Aufruf-Procedure im Hauptprogramm ist auch recht einfach:
Code:
Wie bereits erwähnt, das ganze funktioniert in 11 anderen Applikationen problemlos mit derselben Unit.
{Get License from Server}
procedure TComCont.BitBtn1Click(Sender: TObject); var hili : string; begin if Edit4.Visible and (Edit4.Text <> '') then hili := Edit4.Text else hili := Label49.Caption; Edit3.Text := ALiz.GetLizfromServer('6', hili, Label48.Caption, 'IP'); if StrToIntDef(copy(Edit3.Text,1,3),0) <> 0 then Button8Click(Self) else begin Edit3.Color := clRed; ShowMessage('There happened an error. Please consult the manual and try with a manual licensing'); end; end; |
AW: Indy TCP Client Exception
Hallo Hesch21,
wenn du hier :
Delphi-Quellcode:
Edit3.Text := ALiz.GetLizfromServer('6', hili, Label48.Caption, 'IP');
Einen Breakpoint setzt, ist an der stelle ALiz eventuell = nil ? Greetz Data |
AW: Indy TCP Client Exception
Hallo Data
Deine Vermutung trifft zu. Aliz ist tatsächlich nil. Jetzt sollte ich bloss noch dahinter kommen, weshalb. |
AW: Indy TCP Client Exception
Hi Hesch21,
sorry für die späte Antwort, ich war auf den Delphi Developer Days in Frankfurt ... Zu Deinem Problem, es gibt eigentlich nur 3 Möglichkeiten/Ursachen das ALiz = nil ist: - ALiz wird nirgendswo erzeugt ( ALiz := TALiz.Create ) Wenn aLiz erzeugt wird, in welcher Unit ? - Die Variable aLiz ist 2 x deklariert, einmal in Deiner Unit und noch in einer anderen unit/Form wo das Create der Klasse aufgerufen wird? In dem Fall wäre die var in Deiner Unit nämlich nil. - Letzte recht unwahrscheinliche Möglichkeit, irgendwo außerhalb Deiner unit wiird ALiz := nil gesetzt. Hoffe das hilft jetzt ;-) Greetz Data |
AW: Indy TCP Client Exception
Hallo Data
das war die Erleuchtung! Aus unerfindlichen Gründen hat mir Delphi 7 den Create für das Formular nicht in die DPR eingestellt, als ich die Unit über 'dem Projekt hinzügen' eingebunden haben. Das klappt sonst immer. Wie dem auch sei, dort ein Application.CreateForm(TALiz, ALiz); einfügen hat geholfen. Danke für deine Hilfe. |
AW: Indy TCP Client Exception
Freut mich das ich helfen konnte ;-)
Frohes schaffen ;-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:49 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