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.