Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Indy TCP client empfangene Daten ausgeben (https://www.delphipraxis.net/177602-indy-tcp-client-empfangene-daten-ausgeben.html)

fox67 15. Nov 2013 12:29

Indy TCP client empfangene Daten ausgeben
 
Hallo
ich würde gerne mit delphi Datenpakete die von einem TCP server versendet werden empfangen und in einer Memo ausgeben. Die Daten sehen so aus wie in diesem Manual Seite4. Die Daten werden konstant ohne Unterbrechung gesendet.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
IdTCPClient1.Connect;

   try
      memo1.Lines.Text :=IdTCPClient1.ReadChar;
      finally
    IdTCPClient1.Disconnect;
    end;

end;
Ich habe es so probiert aber das funktioniert leider nicht. Ich vermute weil Delphi wartet bis das Senden gestoppt wird.

Mavarik 15. Nov 2013 12:33

AW: Indy TCP client empfangene Daten ausgeben
 
hmm

Wieviele Zeichen werden den von .ReadChar gelesen?

Nee Idee?

Und ist zu diesem Zeitpunkt den die Connection überhaupt schon etabliert?


Mavarik

himitsu 15. Nov 2013 12:35

AW: Indy TCP client empfangene Daten ausgeben
 
Ankommende Daten empfangen und ausgeben?

Oder bei einem bestehenden Code die komenden/gehenden Daten "mitschreiben"?
> hier gibt es passende Events ala IdTCPClient1.On...




Und was macht wohl
Delphi-Quellcode:
memo1.Lines.Text := ...
?
> alle "vorher" eingetragenen Daten immer wieder mit dem letzten kleinen Stück ersetzen

siehe Mavarik

Also willst du wohl eher, in einer "Schleife", alle neuen Daten einlesen, bis die Verbindung getrennt wurde.

fox67 15. Nov 2013 12:38

AW: Indy TCP client empfangene Daten ausgeben
 
Ich will nur Empfangen und ausgeben

stalkingwolf 15. Nov 2013 12:39

AW: Indy TCP client empfangene Daten ausgeben
 
Mit readln sollte es gehen

fox67 15. Nov 2013 12:44

AW: Indy TCP client empfangene Daten ausgeben
 
hab ich auch schon probiert macht kein Unterschied das Programm reagiert nicht mehr sobald man connected

Mavarik 15. Nov 2013 12:45

AW: Indy TCP client empfangene Daten ausgeben
 
Also...

Ein .Connect baut die Verbindung auf...

Danach besteht die Verbindung aber noch nicht... Das ist keine Procedure die Ausgeführt wird und wartet bis der Server Antwortet... Schau Dir mal die Ereignisse der Komponente an...

Da gibt es ein OnConnect...
Und es gibt ein OnReceive... Was das wohl macht? Richtig, wird aufgerufen, wenn Daten vorliegen...

Ein Doppelklick enthüllt noch mehr...
Da wird übergeben wie viel übertragen wurde... Und ein Pointer...

Und das Memo?

Versuche mal:

Delphi-Quellcode:
Memo1.Lines.Add(MeinText);

Mavarik

stalkingwolf 15. Nov 2013 12:50

AW: Indy TCP client empfangene Daten ausgeben
 
Ich benutze selber immer noch einen TThread der sich um das Thema kümmert, damit die Hauptanwendung nicht blockiert wird.

Delphi-Quellcode:
TClientHandleThread = class(TThread)
  private
    msg : string;
    procedure HandleInput;
    protected
    procedure Execute; override;
  end;

procedure TClientHandleThread.HandleInput;
begin
    addlog(msg);
end;

procedure TClientHandleThread.Execute;
begin
    while not Terminated do begin
        if fmain.myindytcpClient.Connected then begin
            try
                msg:=fmain.myindytcpClient.ReadLn;
                Synchronize(HandleInput);
            except
            end;
        end;
    end;
end;

procedure fmain.myindytcpClientDisconnected(Sender: TObject);
begin
    try
        ClientHandleThread.Terminate;
    except
    end;
end;
und beim connecten auf den Server

Delphi-Quellcode:
ClientHandleThread := TClientHandleThread.Create(True);
                    ClientHandleThread.FreeOnTerminate := True;
                    ClientHandleThread.Resume;
Woher kommen die Daten denn?

sh17 15. Nov 2013 12:50

AW: Indy TCP client empfangene Daten ausgeben
 
Keine direkte Antwort, aber vielleicht hilft es

http://sourceforge.net/projects/indy...urce=directory

fox67 15. Nov 2013 12:55

AW: Indy TCP client empfangene Daten ausgeben
 
Zitat:

Zitat von Mavarik (Beitrag 1236099)
Also...

Ein .Connect baut die Verbindung auf...

Danach besteht die Verbindung aber noch nicht... Das ist keine Procedure die Ausgeführt wird und wartet bis der Server Antwortet... Schau Dir mal die Ereignisse der Komponente an...

Da gibt es ein OnConnect...
Und es gibt ein OnReceive... Was das wohl macht? Richtig, wird aufgerufen, wenn Daten vorliegen...

Ein Doppelklick enthüllt noch mehr...
Da wird übergeben wie viel übertragen wurde... Und ein Pointer...

Und das Memo?

Versuche mal:

Delphi-Quellcode:
Memo1.Lines.Add(MeinText);

Mavarik

Nein ein OnReceive gibt es nicht. Und bei einem Doppelklick auf die Komponente komme ich auf OnConnect


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:26 Uhr.
Seite 1 von 2  1 2      

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