AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi TIdTCPClient -Timer um auf Serveranfrage zu reagieren?
Thema durchsuchen
Ansicht
Themen-Optionen

TIdTCPClient -Timer um auf Serveranfrage zu reagieren?

Ein Thema von moelski · begonnen am 24. Sep 2009 · letzter Beitrag vom 24. Sep 2009
Antwort Antwort
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#1

TIdTCPClient -Timer um auf Serveranfrage zu reagieren?

  Alt 24. Sep 2009, 14:48
Moin !

Im Moment schlage ich mit mit TIdTCPClient und TIdTCPServer herum. Dabei bin ich auf ein interessantes Beispiel gestoßen von http://delphi.about.com/ - der ScreenThief:
http://delphi.about.com/od/interneti.../aa012004a.htm

An sich ein schönes Beispiel (wie ich finde) um die beiden Komponenten zu verstehen. Zwar ist das eine Indy 9 Anwendung, aber mit ein bisserl Umstellung geht das durchaus auch unter Indy 10.

Was mir dabei aufgefallen ist ist die Kommunikation vom Server zum Client. TIdTCPClient hat (im Gegensatz zu TIdTCPServer - OnExecute) ja kein eigenes Event um auf Datenempfang zu reagieren. Beim ScreenThief ist das nun so gelöst, das dort ein Timer pollt. Sprich alle paar ms sendet der Client eine Anfrage an den Server ob den für ihn ein Commando verfügbar ist. Der Server liefert dann das Commando zum Client.
Auf der Client Seite schaut das in etwa so aus:
Delphi-Quellcode:
TCPClient.IOHandler.WriteLn('#'); //POLL Request zum Server
sCommand := TCPClient.IOHandler.ReadLn; // POLL Replay vom Server
Das Konstrukt funktioniert, hat aber doch irgendwie einen faden Beigeschmack:
- Wenn der Server nicht antwortet kann sich der Client aufhängen wegen dem ReadLn
- das Pollen erzeugt Netzwerklast
- Bei mehreren schnell aufeinander folgenden Anfragen an den Client ist das Konstrukt suboptimal

Frage ist nun ... Ist das gängige Praxis das man so vom Server zum Client kommuniziert?
Oder gibt es da elegantere Lösungen?
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: TIdTCPClient -Timer um auf Serveranfrage zu reagieren?

  Alt 24. Sep 2009, 14:57
ich schaue vorher immer mit
if not tcpClient.IOHandler.InputBufferIsEmpty then nach ob sich etwas im Buffer befindet bevor ich daraus lese.

Hiermit lese ich den Buffer aus:
s:= tcpClient.IOHandler.InputBufferAsString; Und das alles passiert in einem Thread.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#3

Re: TIdTCPClient -Timer um auf Serveranfrage zu reagieren?

  Alt 24. Sep 2009, 15:03
Moin Klaus,

und wiedermal treffen wir uns

Ich habe deinen code schon über die Suche gesehen. Ich denke mal es geht um das hier, oder?
http://www.delphipraxis.net/internal...t.php?t=165060

Wie synchronisierst du dann zwischen Thread und Client ?
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: TIdTCPClient -Timer um auf Serveranfrage zu reagieren?

  Alt 24. Sep 2009, 15:27
Hallo Dominik,

ja, die Welt ist klein.

Synchronisieren - eigentlich gar nicht.
Der Server schickt ab und an etwas (Alarmmeldungen)
dieses wird dann im Client wieder zusammengebaut
und weiter verarbeitet.
Die Daten vom Server sollten dann schon eine
gewisse Endemarkierung haben, damit der Client feststellen
kann hier ist die Nachricgt zu Ende.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:25 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