Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi TIdTCPConnection. ReadSmallInt wie einen TimeOut realisieren (https://www.delphipraxis.net/9041-tidtcpconnection-readsmallint-wie-einen-timeout-realisieren.html)

DataCool 17. Sep 2003 10:51


TIdTCPConnection. ReadSmallInt wie einen TimeOut realisieren
 
Hi Leute,

in der letzten Zeit brauch ich echt oft Hilfe :oops:, aber bisher habe Ihr mir immer weiter geholfen, erstmal danke danke danke :hello:

Jetzt konnte ich mein Problem mit der CPU-Last(manchmal auf 98%) soweit fixen, das nur ein Fehler übrig ist.

Ich übertrage mit einen IdTCPServer Live-Bilder zu einen Client !
Damit die Übertragung schneller ist habe ich mir gedacht ich mache nur einmal die Connection vom Client zum Server auf und kommuniziere innerhalb dieser Connection mit einem eigenen Protokoll.
Die Befehl-Kette läuft in etwa so ab :

1. client --> Server : will bild haben
2. Server --> Client : Bildgrösse xxxx Bytes (mit WriteCardinal)
3. Server --> Client : Bildstream (WriteStream)
4. Client --> Server : Bild ok, Fehler (ReadSmallInt 0,1)

wenn bild ok gehe zu 1, ansonsten gehe zu 2.

Funktioniert auch wunderbar, nur mein Problem ist das ich jetzt festgestellt habe, das ab und zu der Client aus anderen Programm technischen Problemen abstürzt.

Wenn dies geschieht und ich gerade im Server-Thread auf die Bildbestätigung warte(ReadSmallInt), dann kann ich 100 Jahre oder länger warten :?

Würde ich das ganze mit Readln machen, hätte ich einen Timeout beim Lesen. So könnte ich mein Problem lösen, dabei ist nur das Problem das beide Programme Client und Server schon produktiv online sind, und ich auch bei gleichzeitigem update nicht garantieren kann, das jeder Kunde sofort die aktuelle software benutzt.

Deshalb : Gibt es eine Möglichkeit Readsmallint mit einem Timeout zu verwenden ?

Danke Data

[edit=sakura]Leerzeichen in Überrschrift eingefügt. Mfg, sakura[/edit]

Stevie 18. Sep 2003 07:57

Re: TIdTCPConnection. ReadSmallInt wie einen TimeOut realisi
 
Ich hoffe, ich hab dich jetzt richtig verstanden....
Versuch es doch so:
Delphi-Quellcode:
i := StrToInt(AThread.Connection.ReadLn(#$A, 1000)); // i: SmallInt;
MfG
Stevie

DataCool 18. Sep 2003 10:28

Re: TIdTCPConnection. ReadSmallInt wie einen TimeOut realisi
 
Hi Stevie,

die Lösung die Du mir geschrieben hast ist mir bekannt ;-)

Diese kann ich aber nicht ohne weiteres anwenden.

Der Server ließt im Moment mit :
i := AThread.connection.readSmallInt;

Der Client schreibt mit :
AThread.connection.writeSmallint;

Wenn ich jetzt beim Server einfach Readln verwende ist der Server nicht kombatibel zum Client, d.h. ich müßte Server und Client ändern.
Das wäre ja normalerweise auch kein Thema, aber Server und Client sind bei nmehreren Kunden schon produktiv online, wenn ich jetzt ein Update von Client u. Server hochlade, dauerd es min. 2 Tage bis alle sich den neusten Stand gezogen haben.

Deshalb suche ich um die Kombatiblität zu sichern einen Timeout-Lösung in Verbindung mit readSmallInt zu finden.

Gruß Data

Stevie 18. Sep 2003 10:59

Re: TIdTCPConnection. ReadSmallInt wie einen TimeOut realisi
 
Hi Data,

versuch doch mal das hier:
Delphi-Quellcode:
AThread.Connection.ReadTimeout := 5000 // DefaultWert: 0


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