AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi TClientSocket Eigenschaften in eigener Unit
Thema durchsuchen
Ansicht
Themen-Optionen

TClientSocket Eigenschaften in eigener Unit

Ein Thema von Piro · begonnen am 12. Aug 2008 · letzter Beitrag vom 12. Aug 2008
Antwort Antwort
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
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: TClientSocket Eigenschaften in eigener Unit

  Alt 12. Aug 2008, 08:05
Eine Methode ist ein Member einer Klasse. Was Du hast, sind reguläre Funktionen. Diese sind zu Events nicht kompatibel, Du musst Dir also eine Klasse schreiben, die die Funktionen besitzt, dann kannst Du sie auch zuweisen.
Delphi-Quellcode:
type TMyClass = class
private
  procedure ClientConnect(Sender: TObject; Socket: TCustomWinSocket);
  ...
end;

...

procedure TMyClass.ClientConnect(Sender: TObject; Socket: TCustomWinSocket);
begin
  //Code
end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Piro
Piro

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

Re: TClientSocket Eigenschaften in eigener Unit

  Alt 12. Aug 2008, 08:35
So, ich habe das jetzt mal geändert aber leider noch nicht am gewünschten Ziel.

Delphi-Quellcode:
...
type
  TMyClass = class
 private
    { Private-Deklarationen }
    procedure ClientConnect(Sender: TObject; Socket: TCustomWinSocket);
    procedure ClientError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer);
  public
    { Public-Deklarationen }
end;
...
procedure TMyClass.ClientConnect(Sender: TObject; Socket: TCustomWinSocket);
begin
// Code
end;

procedure TMyClass.ClientError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
// Code
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.OnError := TMyClass.ClientError; // --> Hier kommt der Fehler
 Client.OnConnect := TMyClass.ClientConnect; // --> Hier kommt der Fehler

 ...
end;
Jetzt kommen die Fehlermedldungen:
Zitat:
E2010 Inkompatible Typen: 'TSocketErrorEvent' und 'Procedure'
Zitat:
E2010 Inkompatible Typen: 'TSocketNotifyEvent' und 'Procedure'
Was nun?
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: TClientSocket Eigenschaften in eigener Unit

  Alt 12. Aug 2008, 08:45
Eine Methode gehört zu einer Instanz.
Client.OnError := MyClass.ClientError; Nur MyClass musst du eben noch erstellen.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: TClientSocket Eigenschaften in eigener Unit

  Alt 12. Aug 2008, 08:49
Du brauchst auch eine Instanz Deiner Klasse. Evtl. geht es auch mit einer Klassenmethode, sowas hab ich aber noch nie versucht.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Piro
Piro

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

Re: TClientSocket Eigenschaften in eigener Unit

  Alt 12. Aug 2008, 09:15
Danke euch. Hab es hinbekommen und wieder etwas dazugelernt.

Schönen Tag noch.
  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 23:35 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