Einzelnen Beitrag anzeigen

Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#1

TClientSocket Eigenschaften in eigener Unit

  Alt 12. Aug 2008, 07:58
Moin,

ich bräuchte mal eure Hilfe. Ich kenne mich nicht so doll damit aus.

Delphi-Quellcode:
unit uHostSocketAlive;

interface

function IsHostSocketAlive(Hostname: String; Port : Integer = 29979) : Boolean;

implementation

uses
  Windows,
  Forms,
  ScktComp;

var
 Client : TClientSocket;
 IsAlive : Boolean;
 Finish : Boolean;

procedure ClientConnect(Sender: TObject; Socket: TCustomWinSocket);
begin
  IsAlive := TRUE;
  Finish := TRUE;
end;

procedure ClientError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
 if ErrorCode > 0 then
 begin
   Client.Close;
   IsAlive := FALSE;
   ErrorCode := 0;
 end;
 Finish := TRUE;
end;

function IsHostSocketAlive(Hostname: String; Port : Integer = 29979) : Boolean;
begin
 IsAlive := FALSE;
 Finish := FALSE;
 Result := FALSE;

 //Initialisierung des Objekts (ältere Delphi-Versionen)
 Client := TClientSocket.Create(Client);
 Client.OnConnect := ClientConnect;
 Client.OnError := ClientError;

 try
   Client.Port := Port;
   // Remote Computer mit dem die Verbindung aufgebaut werden soll
   Client.Host:= Hostname;
   Client.Open;
 except
   //Im Fehlerfall wieder freigeben (ältere Versionen)
   Client.Free;
 end;

 while Finish = FALSE do
 begin
   Application.ProcessMessages;
 end;

 // Result setzen
 Result := IsAlive;
end;

end.
Bei der Zuweisung von Client.OnConnect und Client.OnError kommt es zum Fehler. Denn ich nicht lösen kann.

Meldermeldung:
Zitat:
E2009 Inkompatible Typen: 'Methodenzeiger und reguläre Prozedur'
Funktioniert das überhaupt sowie ich es vorhabe? Bzw. was muss ich ändern, dass es klappt? Wollte eigentlich alles in die Funktion "IsHostSocketAlive" packen aber dazu fehlt mir das Wissen.

Als Ergebnis möchte ich gerne aus einer anderen Unit "IsHostSocketAlive" aufrufen und der Rückgabewert ist TRUE wenn die Verbindung zustande gekommen ist oder FALSE wenn es nicht geklappt hat.

Vielen Dank im voraus. Gruß, Sven
  Mit Zitat antworten Zitat