Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Vernünftig mit Indy9 TCPClient empfangen (https://www.delphipraxis.net/58726-vernuenftig-mit-indy9-tcpclient-empfangen.html)

Die Muhkuh 11. Dez 2005 17:34


Vernünftig mit Indy9 TCPClient empfangen
 
Hallo Jungs, Mädels, Fische, Katzen, Vulkanier, Haie, wasweisichnoch,

ich hätte mal ne Frage zu der Komponenten TIdTCPClient von Indy9 .

Bei der Server-Komponente (TIdTCPServer) gibt es ja das OnExecute, welches ich bei dem Client sehr vermisse.
Beim Client muss man ja ein Timer mitlaufen lassen und alle 500 (z.B.) Millisekunden nach neuen "Nachrichten" schauen.
Gibt es da nicht eine bessere Lösung (sowas wie OnExecute, wie beim Server, wäre natürlich genial)?

MfG,

Manu :hi:

Duffy 11. Dez 2005 17:48

Re: Vernünftig mit Indy9 TCPClient empfangen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Manu,
schau Dir das Beispiel aus diesem Beitrag an.

bye
Claus

Sorry alles zurück. Nimm das anhängende Beispiel. Da werden die eingehenden Nachrichten über TThread verarbeitet.

Die Muhkuh 11. Dez 2005 18:12

Re: Vernünftig mit Indy9 TCPClient empfangen
 
Hi,

danke für dein Beispiel. Ich schaue mir das mal an und versuche es zu verstehen :D

Die Muhkuh 11. Dez 2005 18:48

Re: Vernünftig mit Indy9 TCPClient empfangen
 
Hi,

ich hab nun mal versucht, dein Beispiel bei mir anzubauen. Der Thread läuft, aber es kommt nichts an.

Code:

Delphi-Quellcode:
procedure TClientHandler.Execute;
var
  SizeOfIncomingStream: Integer;
begin
  while not Terminated do
  begin
    if Form2.TCPClient.Connected then
    begin
      try
        CS := TChatStream.Create;
        SizeOfIncomingStream := Form2.TCPClient.ReadInteger();
        Form2.TCPClient.ReadStream(CS, SizeOfIncomingStream);
        Synchronize(HandleInput);
        CS.Free;
      except
        CS.Free;
      end;
    end;
  end;
end;

procedure TClientHandler.HandleInput;
begin
  Form2.HandleInput(CS);
end;

procedure TForm2.HandleInput(var ChatStream: TChatStream);
var
  CP: TChatParser;
begin
  CP := TChatParser.Create(ChatStream.Msg);
  CP.Parse;

  HandleMessages(CP);

  CP.Free;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
  ClientThread := TClientHandler.Create(true);
  ClientThread.FreeOnTerminate := true;
  ClientThread.Resume;
end;
Woran könnte das noch liegen?

Duffy 11. Dez 2005 18:56

Re: Vernünftig mit Indy9 TCPClient empfangen
 
Hallo Manu,
ich versuche es jetzt mal aus dem Bauch heraus, ich vermute, es liegt an der "SizeOfIncomingStream".

Delphi-Quellcode:
 Form2.TCPClient.ReadStream(CS, SizeOfIncomingStream);
So lange nicht alle Zeichen des Streams angekommen sind, die kommen sollen, wartet Readstream auf die restlichen Zeichen. Ich hatte das auch einmal. Ich habe es erst gemerkt, als ich mehr geschickt habe, als kommen sollte.

bye
Claus

Die Muhkuh 11. Dez 2005 19:07

Re: Vernünftig mit Indy9 TCPClient empfangen
 
Hi Claus,


ok, du hast recht. Ich sende 37 Bytes und empfangen werden, sollen ein paar Millionen Bytes.

Die Frage ist, wie komme ich an die richtige Zahl der Bytes dran? Extra die Anzahl der Bytes senden?

Duffy 12. Dez 2005 06:33

Re: Vernünftig mit Indy9 TCPClient empfangen
 
Hallo Manu,
ich würde es so machen. Erst die Anzahl der Bytes als Integer etc. übermitteln. Die Größe kennst Du ja. Dann die Daten hinterher.

bye
Claus


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