Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi TidTCPClient + ReadLn = hängt Programm auf (https://www.delphipraxis.net/70790-tidtcpclient-readln-%3D-haengt-programm-auf.html)

thetrue 4. Jun 2006 22:25


TidTCPClient + ReadLn = hängt Programm auf
 
moin,

wenn ich mit einem Timer(100), text mittels ReadLn('', 5) abfragen will, wird mein Programm blockiert/aufgehängt

wie kann man das ändern?

guste 5. Jun 2006 00:51

Re: TidTCPClient + ReadLn = hängt Programm auf
 
indem man herausfindet wo sich das Programm aufhängt ;-)

Ich dachte zuerst an ein Problem bei ATerminator = '', jedoch macht das nichts weil ReadLine das bereits abfängt.

Delphi-Quellcode:
  // User may pass '' if they need to pass arguments beyond the first.
  if Length(ATerminator) = 0 then begin
    ATerminator := LF;
  end;
Ich würde also einfach mal mit durch den Indy Quellcode steppen und schauen was passiert.

thetrue 5. Jun 2006 01:05

Re: TidTCPClient + ReadLn = hängt Programm auf
 
nja, das hilft mir nicht weiter

guste 5. Jun 2006 01:28

Re: TidTCPClient + ReadLn = hängt Programm auf
 
Setze einen Haltepunkt vor ReadLine und steppe mit F7 durch den Quellcode bis Dein Programm hängt. Untersuche danach die Zeile(n) die unmittelbar davor verarbeitet wurde(n).

thetrue 5. Jun 2006 03:28

Re: TidTCPClient + ReadLn = hängt Programm auf
 
Delphi-Quellcode:
procedure Tfrm_main.Timer2Timer(Sender: TObject);
begin
if server.Connected then
  begin
  tmptxt := server.ReadLn(':cmd\*\'); //<-- das ist der auslöser, es passiert nur dann was, wenn inhalt an kommt ;)
  timer1.Enabled := true;
  end;
end;
wie kann man das ändern?

jfheins 5. Jun 2006 12:28

Re: TidTCPClient + ReadLn = hängt Programm auf
 
Probiers mal mit nem Thread ;)

thetrue 5. Jun 2006 13:10

Re: TidTCPClient + ReadLn = hängt Programm auf
 
wie?
ich weis nicht wie man threads bei TidCTCPlient benutzt

jfheins 5. Jun 2006 13:15

Re: TidTCPClient + ReadLn = hängt Programm auf
 
Naja ... das ReadLn in nen Thread verlagern und wenn was da ist, mit synchonize() ein Event auslösen ...

thetrue 5. Jun 2006 13:17

Re: TidTCPClient + ReadLn = hängt Programm auf
 
und wie macht man das?

guste 5. Jun 2006 16:03

Re: TidTCPClient + ReadLn = hängt Programm auf
 
Ich weiß nicht was jetzt ein Thread da noch soll. Mir stellt sich die Frage ob das Client-Server-Prinzip hier überhaupt richtig angewendet wird. Die paar Brocken, die von thetrue geschrieben wurden deuten darauf hin, daß der Server sendet sobald ein Verbindung zum Client besteht. Ich könnte ich mir sowas vorstellen wenn der Server alle Client über irgendwas informieren will. Der normale Weg wäre allerdings, daß der Client den Server etwas fragt und der Server entsprechend antwortet. Oder anders: der Client sendet ein Kommando und der Server "serviert" das Ergebnis. Was genau gemacht werden soll ist mir aber nicht bekannt, da sollte thetrue nachlegen.

Des Weiteren werden Daten die per WriteLn am Server verschickt werden mit LF ($0A) abgeschlossen (terminiert). thetrue stellt als Terminator aber ':cmd\*\' ein. Absicht???

In meiner ersten Antwort hatte ich angeregt per Debugger in den Indy Quellcode zu springen. Was ist daraus geworden? Die Aussage der Fehler tritt bei ReadLn auf ist mir zu einfach.

thetrue 6. Jun 2006 21:06

Re: TidTCPClient + ReadLn = hängt Programm auf
 
nein, es ist nicht normaler server-client prinzip, aber jeder client empfängt und sendet daten vom/zum sever

inherited 10. Jun 2006 19:45

Re: TidTCPClient + ReadLn = hängt Programm auf
 
dein readln wartet halt bis was ankommt, und wenn der server grad nix schickt, hängts halt :roll:
wenn du dir die function readln mal richtig angeguckt hättest wüsstest du, das diese mit 3 parametern aufgerufen werden kann:
ATerminatorString
ATimeout
AMaxLineLength
wenn ich mich recht erinnere


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