Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Clientsocket Thread Connectet nicht?! (https://www.delphipraxis.net/119066-clientsocket-thread-connectet-nicht.html)

gandime 20. Aug 2008 13:31


Clientsocket Thread Connectet nicht?!
 
Hi,
ich schreibe mir gerade einen ClientSocket Thread und es sieht alles soweit gut aus bis darauf das der Clientsocket nicht connectet!
Thread-Unit:
Delphi-Quellcode:
TCsThread = class(TThread)
  private
    Cs: TClientSocket;
    FHost: string;
    FIPort: Integer;
  protected
    procedure Execute; override;
  public
    constructor Create(CreateSuspended: Boolean);
    property Host: String read FHost write FHost;
    property Port: Integer read FIPort write FIPort;
  end;
constructor TCsThread.Create;
begin
  inherited Create(True);
  Cs := TClientSocket.Create(nil);
  cs.OnRead:=OnClientRead;
  cs.OnDisconnect:=OnDiscon;
end;

procedure TCsThread.Execute;
begin
  cs.Host:=Host;
  cs.Port:=Port;
  Cs.Active:=true;//bis hierhin läuft alles super! Aber der möchte anscheinend einfach nicht connecten!
end;
Main-Form:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  cs:TCsThread;
begin
  Cs:=TCsThread.Create(true);
  Cs.host:='127.0.0.1';
  Cs.port:=1000;
  cs.FreeOnTerminate:=true;
  cs.Resume;
end;
Was mache ich falsch?

mfg
gandime

Apollonius 20. Aug 2008 13:36

Re: Clientsocket Thread Connectet nicht?!
 
Die ScktComp-Komponenten arbeiten mit Windows-Fenster-Nachrichten. Du brauchst daher in jedem Fall eine Nachrichtenschleife im erzeugenden Thread:
Delphi-Quellcode:
var Msg: TMsg;

while GetMessage(Msg, 0, 0, 0) do
begin
  TranslateMessage(Msg);
  DispatchMessage(Msg);
end;
Zum Beenden musst du die Funktion PostQuitMessage aufrufen.

gandime 20. Aug 2008 13:57

Re: Clientsocket Thread Connectet nicht?!
 
thx läuft super

edit:
fast^^
jetzt möchte mein Destructor nichtmehr^^
Delphi-Quellcode:
destructor TCsThread.Destroy;
begin
  Cs.Free;
  PostQuitMessage(0);
  inherited Destroy;
end;
nach inherited macht er nicht weiter und das fenster friert ein.

edit2:
weiterhin kann ich cs.activ:=false; nicht setzen, da ich dann folgenden Fehler bekomme:
Zitat:

Erste Gelegenheit für Exception bei $75683843. Exception-Klasse EAccessViolation mit Meldung 'Access violation at address 00000000. Read of address 00000000'. Prozess PrjCSThread.exe (928)
edit3:
so jetzt habe ich verstanden das PostQuitMessage(0); den destructor aufruft aber ich bekomme wieder eine EAccessViolation sobald ich diesen Befehl aufrufe außer wenn ich ihn im OnRead property aufrufe warum?
der Fehler tritt hier auf: while GetMessage(Msg, 0, 0, 0) do


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:26 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