![]() |
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: |
Re: Vernünftig mit Indy9 TCPClient empfangen
Liste der Anhänge anzeigen (Anzahl: 1)
|
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 |
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:
Woran könnte das noch liegen?
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; |
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:
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.
Form2.TCPClient.ReadStream(CS, SizeOfIncomingStream);
bye Claus |
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? |
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 20:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz