Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Konzept für Indy Protokoll bzw. Übermittlung. (https://www.delphipraxis.net/109926-konzept-fuer-indy-protokoll-bzw-uebermittlung.html)

Thomas83 10. Mär 2008 11:33


Konzept für Indy Protokoll bzw. Übermittlung.
 
hi zusammen,

bin dabei eine Netzwerkanwendung zu programmieren.
Das Protokoll steht.

Vielleicht kurz zur erläuterung.
Das Protokoll besteht aus 3 Bereichen.
Header -> Infos über den sender, und info über kommendes Datenpaket.
Daten -> können unterschiedliche Datenpaket sein.
Ckeck -> prüfsumme von allen Paketen.

Möchte meine Anwendung gerne so aufbauen.
[Client]
Es gibt eine Procedure die mit ReadBuffer auf Daten wartet.
Sendet der Client einen Befehl wartet er auf eine Bestätigung (+OK)
Delphi-Quellcode:
SendeHeader(header);
SendeDaten(Daten);
SendeCkeck(check);
s := fidTCPClient.ReadLn;
if s <> '+OK' then
  ...
Da aber oben eine Procedure mit ReadBuffer auf einen Header wartet, kommt das ok ja hier nicht an.
Also habe ich die Procedure als Thread gestartet und kann wenn Daten (Header/Daten/Ckeck) gesendet werden mit TerminateThread und BeginThread die Procedure wieder starten.

[Server]
Beim Server ist es fast genauso. Nur das in OnExecute von TidTCPServer auf einen Header mit ReadBuffer gewartet wird.
Wenn jetzt ein Befehl vom Server zum Client gesendet wird.
Delphi-Quellcode:
SendeHeaderToClient(header,client);
SendeDatenToClient(Daten,client);
SendeCkeckToClient(check,client);
s := client.ReadLn;
if s <> '+OK' then
  ...
Muss auch hier die OnExecute beendet werden. Mit TerminateThread habe ich es schon mal geschaft das der Thread beendet wird, jedoch bekomme ich den nicht weider zum laufen.


Die Idee ist einfach nur das es eine Methode gibt die lauscht ob Daten für den Client oder Server gibt und diese dann verarbeitet.
Möchte man eine Befehl senden und wartet auf eine Rückmeldung muss die "lausch procedure" beendet werden.

Vielleicht habt ihr noch andere ideen, wie ich es besser umsetzten könnte.

Thomas83 10. Mär 2008 16:17

Re: Konzept für Indy Protokoll bzw. Übermittlung.
 
Habe es jetzt so gelöst....
Die Procedure OnExecute vom Server sieht so aus:

pseudocode
Delphi-Quellcode:
begin
  if fNichtLauschen then exit;
  AThread.Connection.ReadTimeOut := 20;
  try
    AThread.Connection.ReadBuffer(header,sizeof(header));
  except
    on e : EidReadTimeout do exit;
  end;
  ... //weiter bearbeitung
end;
möchte ich einen Befehl absenden und ware auf eine antwort
pseudocode
Delphi-Quellcode:
begin
  fNichtLauschen := true;
  sleep(21);
  SendeHeaderToClient(header,i);
  SendeDatenToClient(daten,i);
  SendeSummeToClient(summe,i);
  s := LesenAntwort;
  fNichtLauschen := false;
end;
was meint ihr?
funktioniert alles wunderbar bekomme keinen fehler und alle daten werden richtig versendet.


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