AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi TServerThread.ClientExecute; Buffer Problem
Thema durchsuchen
Ansicht
Themen-Optionen

TServerThread.ClientExecute; Buffer Problem

Ein Thema von Gimp · begonnen am 4. Okt 2011 · letzter Beitrag vom 5. Okt 2011
Antwort Antwort
FredlFesl

Registriert seit: 19. Apr 2011
293 Beiträge
 
Delphi 2009 Enterprise
 
#1

AW: TServerThread.ClientExecute; Buffer Problem

  Alt 5. Okt 2011, 07:04
Ich habe bessere Erfahrungen mit einem anderen Protokoll gemacht. Bei dem von Sir Rufo vorgeschlagenen hat man Probleme, wenn die Länge nicht korrekt übertragen wird oder es kurzzeitige Aussetzer gibt. Denn entgegen der Theorie bietet TCP alles andere als 'QoS'.

Der Empfänger muss neben dem Ende eines logischen Paketes auch den Anfang sicher erkennen können.

Ich verwende Frames, also
[Start-Bytes] [Daten] [Prüfsumme][Ende-Bytes]

1. Der Empfänger verwirft alles, bis er die Start-Bytes-Sequenz empfängt. Sodann liest er alles bis zur Ende-Bytes-Sequenz.
2. Sollt die Start- bzw. Ende-Byte-Sequenz übertragen werden, so wird anstelle dieser Sequenz (sie würde ja den Empfänger durcheinanderbringen) einfach etwas anderes übertragen (Stichwort: Escapen). Das "Andere" ist dem Empfänger bekannt und wenn er das empfängt, übersetzt er das wieder zurück.

Wir arbeiten in Fabriken, bei denen das Netzwerk sehr instabil ist und daher haben wir so ziemlich alles erlebt, was übertragungstechnisch passieren kann. Hier wird sogar noch das Datenpaket über einen Längenpräfix abgesichert.. Es wäre denkbar, das die Endesequenz verschluckt wird und dann würde o.g. Verfahren endlos weiterlesen.

Als letzten Notnagel haben wir eine maximale Paketlänge von 1MB vereinbart.
Das Bild hängt schief.
  Mit Zitat antworten Zitat
Gimp

Registriert seit: 27. Dez 2007
7 Beiträge
 
Delphi 2006 Personal
 
#2

AW: TServerThread.ClientExecute; Buffer Problem

  Alt 5. Okt 2011, 18:00
Naja bei mir gab es bisher keine Probleme mehr. Ich habe über 5 offene Clients zusammen rund 5 Millionen Pakete an den Server gesendet, alle sind sie heile angekommen. So lange die Größe des Paketes übermittelt und anschließend überprüft wird ob auch noch genügend Bytes im Buffer verfügbar sind, sollte es ja keine Probleme geben.

Was mich nur nicht so ganz erschließt, ist wie man den Clienten nun im Thread laufen lässt. Ich habe einfach einen eigenen Thread mittels BeginThread() erstellt, um dann ähnlich wie beim Server auf Pakete zu warten. TServerClientThread funktioniert wie ich das mitbekommen habe nur beim Server, zumindest bietet das ClientSocket keine Option um automatisch einen Thread zu starten. Die Beispiele im Internet sind da auch sehr rar oder veraltet..
  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 07:43 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