Einzelnen Beitrag anzeigen

Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: TIdTCPServer / TIdTCPClient => Ping - Pong

  Alt 21. Jun 2010, 14:08
HI Jackie,

1.
Zitat:
Die CS ist damit wenn der Server gerade list nicht wo anders am Server OnWrite aufgerufen wird. Oder ist das CS zu viel, habe das gleich auch am Client.
Habe die Funktion nur OnRead genannt. msg ist local.
Die CS solltest Du auf jeden Fall rausschmeissen, im Client kann das sinnvoll und notwendig sein. Im Server allerdings läuft jedes OnExecute(bei Dir OnRead) innerhalb eines eigenen Threads und wenn sdie Variable "msg" sowieso lokal ist, gibt es keinerlei GRund diese mit einer CS zu schützen ,auf jeden Fall sehe ich keinen auf Basis der Codeschnipsel.

2.
Zitat:
Ein leerstring sollte eigentlich nicht kommen. Und wenn doch kann ich eh nichts damit anfangen. Also bei einem fehler, meist Timeout, soll nicht weiter gemacht werden, falsch?
Recht hast Du, ich war mit meiner etwas zu voreilig, das liegt allerdings dran das ich das ganze immer ohne Exception löse.
In Indy10 würde das dann so aussehen :
Delphi-Quellcode:
  // Bis max. 2,5 Sekunden warten das Daten erfolgreich in den Buffer geschrieben wurden
  AContext.Connection.IOHandler.CheckForDataOnSource(2500);
  // Prüfen, ob die Client Verbindung noch besteht, eventuell hat der Server beim CheckForDataOnSource festgestellt das die Verbindung weg ist
  if not AContext.Connection.Connected then exit;
  // Sind keine Daten im Buffer, dann raus
  if AContext.Connection.IOHandler.InputBufferIsEmpty then exit;
  // hier jetzt weiter mit ReadLN ... sind jetzt auf jeden Fall Daten zum Lesen da !
  // ...
In Indy9 sollte der Code auch funktionieren Du must nur AConntext durch AThread ersetzen und das IOHandler in der Mitte weg lassen.

3. Ok, dann ist ja alles gut

4. Zur Umstellung von Indy9 auf Indy10 existieren hier einige Threads, das ganze ist je nach Delphi Version mit ein bisschen "Handarbeit" verbunden. Deshalb hängt es von der größere des Projekts und DEiner aktuellen Entwicklungsumgebung ab ob es jetzt wirklich ratsam ist auf Indy10 umzustellen,
oder ob für Deine Belange Indy9 absolut ausreichend ist. Eine großere Änderung von Indy9 zu Indy10 ist, das nicht mehr jede Connection Ihren eigenen Thread hat,
sondern das es einen "Thread-Pool" gibt, der freie Threads an die verschiedenen Clients verteilt.

Greetz Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat