Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi [Indy,TCP,Thread,ReadBuffer] While will nicht stopen! (https://www.delphipraxis.net/26365-%5Bindy-tcp-thread-readbuffer%5D-while-will-nicht-stopen.html)

NeoLuxembourg 22. Jul 2004 16:16


[Indy,TCP,Thread,ReadBuffer] While will nicht stopen!
 
Hey leude ...

Also, ich versuche seit ein par Tage ein Client - Server programm (genauer gesagt 2 softs, ein Client un ein Server) um eine bassi für ein Gameserver zu erstellen ;)

Mein SC:
Delphi-Quellcode:
unit UMain;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  IdAntiFreezeBase, IdAntiFreeze;

 // ------- NETWORK PROTOKOL --------
 // v001
  type
        TNetConfig = record
                data : boolean;
                CMD : string[20];
                SIP : string[16];
                DIP : string[16];
                end;

  // ---------------------------------
 
  type
        TForm1 = class(TForm)
    tcpClient: TIdTCPClient;
    GroupBox1: TGroupBox;
    btnConnect: TButton;
    edtHost: TEdit;
    edtPort: TEdit;
    edtUser: TEdit;
    edtPass: TEdit;
    btnDisconnect: TButton;
    Label1: TLabel;
    Label2: TLabel;
    memLog: TMemo;
    IdAntiFreeze1: TIdAntiFreeze;
    procedure FormDestroy(Sender: TObject);
    procedure btnConnectClick(Sender: TObject);
    procedure btnDisconnectClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  inloop : integer = 1; //default value = 1 (while in thread = stop !)

implementation

{$R *.DFM}

function netscan(P : pointer): integer;
var
        Data:TNetConfig;
begin

// Code !
while inloop =0 do
        begin
          //read data from server

 // PROBLEM IST VON HIER
          Form1.tcpclient.ReadBuffer(Data,sizeof(Data));
 // BIS HIER ;)

          if Data.data = false then
                Form1.memLog.Lines.add('STR:'+Data.CMD)
          else
                Form1.memLog.Lines.add('CMD:'+Data.CMD);
               
          // read thread status (inloop value)
          sleep(1);
          Form1.Label1.Caption := inttostr(inLoop);

        end;

end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
        //set inLoop to 1 (stops while in thread)
        InterlockedExchange(inLoop, 1);
        // TCP Disconnection !
        tcpclient.Disconnect;
end;

procedure TForm1.btnConnectClick(Sender: TObject);
var
  ThreadID: LongWord;
  p: Pointer;
begin

   // Server-IP (Data from edtHost)
        tcpclient.Host := edtHost.Text;
        // Server-Port (Data from edtPort)
        tcpclient.Port := strtoint(edtPort.Text);
        // Connection to server
        tcpClient.Connect;
        // If connection is succesfull, then start the thread !
        if tcpClient.Connected then
        begin
                memLog.Lines.Add('Connected to server!');
                //set inLoop to 0 (while in thread can run)
                InterlockedExchange(inLoop, 0);
                //start thread !
                CloseHandle(BeginThread(nil, 0, @netscan, p, 0, ThreadID));
        end;
end;

procedure TForm1.btnDisconnectClick(Sender: TObject);
begin
    //set inLoop to 1 (stops while in thread)
    InterlockedExchange(inLoop, 1);
end;

end.
Main problem:

Wenn ich die zeile

Delphi-Quellcode:
Form1.tcpclient.ReadBuffer(Data,sizeof(Data));
setze dann kann ich den wert von inLoop nich mehr ändern. Es bleibt immer bei 0, dh das mein while schleiffe im thread nicht stopt und wenn ich das Programm einfach zuclicke et halte ich eine Fehlermeldung ... execption .. bla bla .."Disconnect" ... Ich verstehe wo das problem ist ... ich versuche ein ReadBuffer() zu machen, doch ich bin schon disconnected ... doch? Wie löse ich das jetzt?

- Thread killen?

Warum geet das mit dem inLoop nicht ?

Thx :D

PS: Hab den SC so gut es nur geht geComment!

NeoLuxembourg 22. Jul 2004 17:58

Re: [Indy,TCP,Thread,ReadBuffer] While will nicht stopen!
 
hmmm ... habs einfach gekillt ... ;)


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