AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi [Indy,TCP,Thread,ReadBuffer] While will nicht stopen!
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von NeoLuxembourg · begonnen am 22. Jul 2004 · letzter Beitrag vom 22. Jul 2004
Antwort Antwort
NeoLuxembourg

Registriert seit: 16. Jul 2004
12 Beiträge
 
#1

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

  Alt 22. Jul 2004, 16:16
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

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

PS: Hab den SC so gut es nur geht geComment!
  Mit Zitat antworten Zitat
NeoLuxembourg

Registriert seit: 16. Jul 2004
12 Beiträge
 
#2

Re: [Indy,TCP,Thread,ReadBuffer] While will nicht stopen!

  Alt 22. Jul 2004, 17:58
hmmm ... habs einfach gekillt ...
  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 02:06 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