AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Konzept für Indy Protokoll bzw. Übermittlung.
Thema durchsuchen
Ansicht
Themen-Optionen

Konzept für Indy Protokoll bzw. Übermittlung.

Ein Thema von Thomas83 · begonnen am 10. Mär 2008 · letzter Beitrag vom 10. Mär 2008
Antwort Antwort
Thomas83

Registriert seit: 7. Jan 2008
180 Beiträge
 
#1

Konzept für Indy Protokoll bzw. Übermittlung.

  Alt 10. Mär 2008, 11:33
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 <> '+OKthen
  ...
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 <> '+OKthen
  ...
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.
  Mit Zitat antworten Zitat
Thomas83

Registriert seit: 7. Jan 2008
180 Beiträge
 
#2

Re: Konzept für Indy Protokoll bzw. Übermittlung.

  Alt 10. Mär 2008, 16:17
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.
  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 23:41 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