Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi TClientSocket: Problem bei Eventzuweisung (https://www.delphipraxis.net/98123-tclientsocket-problem-bei-eventzuweisung.html)

Nils_13 21. Aug 2007 21:20


TClientSocket: Problem bei Eventzuweisung
 
Hi,

ich bin der Meinung, dass man nur dann eine GUI benötigt, wenn sie wirklich nötig ist, ansonsten tut es auch eine Konsolenanwendung.

GUI:
Client auf die Form, Port und Host eingestellt, am Ende noch Open aufgerufen und im OnConnect nachgefragt, ob die Verbindung geklappt hat. Kein Problem.

Konsolenanwendung:
Eigene Klasse erstellt, Events werden NICHT zugewiesen. Warum ?

Delphi-Quellcode:
type
  TClient = class
    constructor Create;
  public
    Cli : TClientSocket;
    procedure ClientError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer);
    procedure ClientConnect(Sender: TObject; Socket: TCustomWinSocket);
    procedure ClientDisconnect(Sender: TObject; Socket: TCustomWinSocket);
  end;

constructor TClient.Create;
begin
  Cli := TClientSocket.Create(nil);
  with Cli do
  begin
    // Einstellungen
    Address := '209.85.129.104';
    Port   := 80;
    // Standardzuweisungen setzen
    OnConnect   := ClientConnect;
    OnDisconnect := ClientDisconnect;
    OnError     := ClientError;
    // Öffnen
    Open;
  end;
end;

procedure TClient.ClientConnect(Sender: TObject; Socket: TCustomWinSocket);
begin
  if Socket.Connected then
    WriteLn('Verbindung erfolgreich')
  else
    WriteLn('Verbindung fehlgeschlagen');
end;

Muetze1 21. Aug 2007 21:35

Re: TClientSocket: Problem bei Eventzuweisung
 
Zitat:

Zitat von Nils_13
Konsolenanwendung:
Eigene Klasse erstellt, Events werden NICHT zugewiesen. Warum ?

Wer sagt dir denn das die Events nicht zugewiesen werden? Ist es nicht wahrscheinlicher das sie nicht ausgelöst werden?

Nils_13 21. Aug 2007 21:44

Re: TClientSocket: Problem bei Eventzuweisung
 
Ok, aber warum werden sie nicht ausgelöst ? Sie müssten *eigentlich*.

sirius 21. Aug 2007 21:46

Re: TClientSocket: Problem bei Eventzuweisung
 
Was fehlt dir denn? Also ich bekomme ein ErrorEvent=eeConnect in deine ClientError-Methode mit Errorlevel=10060.
Edit: Meine natürlich Errorcode :drunken:
Edit2: Hey: Und mit deiner IP krieg ich sogar ein "Verbindung erfolgreich" (warum habe ich auch erst die IP verändert :wall: )

Nils_13 22. Aug 2007 18:13

Re: TClientSocket: Problem bei Eventzuweisung
 
Hast du auch wirklich die Klasse genommen und erstellt ?

:twisted: Wieso funzt bei allen anderen immer alles und bei mir nicht :twisted:

sirius 22. Aug 2007 18:30

Re: TClientSocket: Problem bei Eventzuweisung
 
Na klar. Warte ich zeigs gleich. Muss ihn nur nochmal erstellen.

Delphi-Quellcode:
program Project2;

{$APPTYPE CONSOLE}

uses windows,scktcomp;

type
  TClient = class
    constructor Create;
  public
    Cli : TClientSocket;
    procedure ClientError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer);
    procedure ClientConnect(Sender: TObject; Socket: TCustomWinSocket);
//    procedure ClientDisconnect(Sender: TObject; Socket: TCustomWinSocket);
  end;

constructor TClient.Create;
begin
  Cli := TClientSocket.Create(nil);
  with Cli do
  begin
    // Einstellungen
    Address := '209.85.129.104';
    Port   := 80;
    // Standardzuweisungen setzen
    OnConnect   := ClientConnect;
 //   OnDisconnect := ClientDisconnect;
    OnError     := ClientError;
    // Öffnen
    Open;
  end;
end;

procedure Tclient.ClientError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
  writeln('Error: ',errorcode);
end;
procedure TClient.ClientConnect(Sender: TObject; Socket: TCustomWinSocket);
begin
  if Socket.Connected then
    WriteLn('Verbindung erfolgreich')
  else
    WriteLn('Verbindung fehlgeschlagen');
end;


var client:Tclient;
    msg:Tmsg;
begin
  client:=tclient.create;
  while getmessage(msg,0,0,0) do dispatchmessage(msg);

  client.free; //kommt jetzt eh nie hierher ;-)

end.

Nils_13 22. Aug 2007 18:59

Re: TClientSocket: Problem bei Eventzuweisung
 
Hm...es liegt definitiv an dieser Zeile:
Delphi-Quellcode:
while getmessage(msg,0,0,0) do dispatchmessage(msg);
Warum funktioniert es mit ihr, im Vergleich zu meiner ?

sirius 22. Aug 2007 19:21

Re: TClientSocket: Problem bei Eventzuweisung
 
Ich kenne deine "Zeile" nicht.

Funktionieren ist etwas übertrieben, man muss wahrscheinlich daran noch etwas ändern, damit auch der Rest des Programmes weiterläuft.

Nils_13 22. Aug 2007 19:29

Re: TClientSocket: Problem bei Eventzuweisung
 
Delphi-Quellcode:
var Client : TClient;
    line  : String;
begin
  WriteLn('blabla');

  Client := TClient.Create;

  ReadLn(line);
  if line = '...' then
  begin
    // ...
  end else
  begin
    Client.Free;
    Exit;
  end;
end.

sirius 22. Aug 2007 19:36

Re: TClientSocket: Problem bei Eventzuweisung
 
ReadLn auf der Konsole und Messageabarbeitung, geht zugleich nicht wirklich. Da musst du dir wahrscheinlich deine eigene Readln-Methode basteln.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:24 Uhr.
Seite 1 von 2  1 2      

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