![]() |
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:
Da aber oben eine Procedure mit ReadBuffer auf einen Header wartet, kommt das ok ja hier nicht an.
SendeHeader(header);
SendeDaten(Daten); SendeCkeck(check); s := fidTCPClient.ReadLn; if s <> '+OK' then ... 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:
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.
SendeHeaderToClient(header,client);
SendeDatenToClient(Daten,client); SendeCkeckToClient(check,client); s := client.ReadLn; if s <> '+OK' then ... 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. |
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:
möchte ich einen Befehl absenden und ware auf eine antwort
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; pseudocode
Delphi-Quellcode:
was meint ihr?
begin
fNichtLauschen := true; sleep(21); SendeHeaderToClient(header,i); SendeDatenToClient(daten,i); SendeSummeToClient(summe,i); s := LesenAntwort; fNichtLauschen := false; end; funktioniert alles wunderbar bekomme keinen fehler und alle daten werden richtig versendet. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:32 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