AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Netzwerkprotokoll mit Verschlüsselung, Kompression, Prioritätssystem und vielem mehr

Netzwerkprotokoll mit Verschlüsselung, Kompression, Prioritätssystem und vielem mehr

Ein Thema von Zacherl · begonnen am 24. Sep 2012 · letzter Beitrag vom 16. Okt 2012
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von Zacherl
Zacherl
Registriert seit: 3. Sep 2004
Hallo zusammen,

in diesem Thread habe ich ein paar Anregungen für ein Netzwerkprotokoll gesucht. In der Hoffnung, dass mir ein paar Leute beim Testen helfen und vielleicht noch einige Verbesserungsvorschläge auftauchen, präsentiere ich hier schonmal den aktuellen (voll funktionsfähigen) Fortschritt.

Die wichtigsten Features im Überblick:
  • Trennung von Datenpaketen
    • Jedes Paket kommt unverändert und korrekt getrennt beim Empfänger an.
    • Zwei schnell aufeinander gefolgte Datenpakete kommen so beispielsweise nicht in einem Rutsch an, wie es normalerweise bei TCP die Regel ist.
  • Simultane Übertragungen
    • Durch dieses Feature ist es möglich, mehrere Übertragungen gleichzeitig über eine einzelne Verbindung ablaufen zu lassen.
    • Die maximale Anzahl an gleichzeitigen Übertragungen kann individuell festgelegt werden.
  • Einfaches Prioritätssystem
    • Priorisierte Übertragungen sind auch dann aktiv, wenn die maximale Anzahl an gleichzeitigen Übertragungen bereits erreicht ist. So kann man beispielsweise Steuerbefehlen einen Vorrang vor Dateitransfers einräumen.
  • Transparente Verschlüsselung
    • Über einfache Encryption Provider Klassen können sämtliche Benutzerdaten vollständig transparent verschlüsselt übertragen werden.
  • Transparente Kompression
    • Analog zur Verschlüsselung können die Benutzerdaten automatisch blockweise komprimiert werden.
  • Transferkontrolle
    • Sowohl Sender als auch Empfänger kann über einfache Methoden eine Übertragung pausieren, fortsetzen oder abbrechen.
  • Eventbasierte Funktionalität
    • Verschiedene Events, wie beispielsweise OnTransferInit, OnTransferWork, OnTransferData und OnTransferFinish bieten dem Entwickler eine komfortable Schnittstelle.
  • Einfache Dateiübertragungen
    • Integrierte Unterstützung für Dateiübertragungen. Hierdurch müssen Dateien nicht erst vollständig in den Speicher geladen werden, um sie verschicken zu können.
  • Intelligenter Datenempfang
    • Der Empfänger kann pro Übertragung seperat entscheiden, ob er über die eingehenden Daten bei jedem Block, oder erst am Ende der Übertragung informiert werden will.
    • Erstere Möglichkeit bietet sich beispielsweise für Dateiübertragungen an. Bei der zweiten Variante sorgt IDTP automatisch für das Sammeln der Daten im Speicher.
  • Meta Informationen
    • Jeder Übertragung können Meta Daten hinzugefügt werden, welche dem Empfänger (und Sender) sofort beim Start des Transfers in den Events zur Verfügung stehen. Diese Daten werden auch dann sofort gesendet, wenn die eigentlichen Benutzerdaten z.b. aufgrund der maximalen Anzahl an gleichzeitigen Übertragungen noch nicht gesendet werden.

Weitere Informationen:
  • Hagen Reddmanns RCx Unit, welche im TdxIDTPEncryptionProviderRCx verwendet wird, findet ihr hier:
  • Die ZLibEx Unit für den TdxIDTPCompressionProviderZLib gibt es hier:

Eine (einfache) Demo Anwendung habe ich als Anhang hinzugefügt. Ich würde mich über jeden Test und vor allem auch über Verbesserungsvorschläge sehr freuen

Viele Grüße
Zacherl
Angehängte Dateien
Dateityp: rar IDTP.rar (11,1 KB, 55x aufgerufen)
Dateityp: rar IDTPDemo.rar (115,1 KB, 62x aufgerufen)
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)

Geändert von Zacherl (10. Okt 2012 um 14:30 Uhr)
 
ByTheTime

 
Delphi XE2 Architect
 
#2
  Alt 8. Okt 2012, 21:28
Uff... ich schau mir das gearde an. Hast du auch dazu eine Demo Dann würde ich mir erstmal schneller einen Überblick schaffen können. Eventuell würde ich sie dann in mein bestehendes Protkoll einbinden, ich war die ganze Zeit auf der Suche nach soetwas, denn im Moment kommt in meinem Projekt der Punkt, wo es um das übertragen von Dateien geht, und da wird es schon ziemlich schwierig selbst was auf die Beine zu stellen. Ein ordentliches Protkoll kommt mir da sehr recht Und ich arbeite auch gearde mit der Verschlüsselung... Da läuft im Moment auch nicht alles rund :S
Lukas

Geändert von ByTheTime ( 8. Okt 2012 um 21:36 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

 
Delphi 10.2 Tokyo Starter
 
#3
  Alt 9. Okt 2012, 03:15
Hatte im Moment leider noch ein paar andere Sachen zu tun, deshalb ist die Entwicklung der Demo etwas eingeschlafen. Werde die Tage mal dran weiterarbeiten, bzw. kann dir gerne die unfertige Demo schonmal vorweg per PM schicken, wenn du magst. Ist soweit eigentlich alles drinnen, was man braucht, um sich einzuarbeiten.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

 
Delphi 10.2 Tokyo Starter
 
#4
  Alt 10. Okt 2012, 13:11
Hier mal ein kleines Update:
  • Jeder Transfer hat nun eine eigene Instanz des Encryption- und Compression Providers
  • Der MetaData Provider wurde entfernt
  • Neue Helfer Klassen für einfaches Senden und Empfangen von Daten- oder MetaDaten Paketen wurden hinzugefügt
  • Verschiedene Bugfixes

Die meisten Anregungen aus dem Konzept Thread habe ich aus Zeitgründen noch nicht eingebaut, allerdings habe ich jetzt mal eine kleine Demo Anwendung hinzugefügt.

Geändert von Zacherl (10. Okt 2012 um 14:31 Uhr)
  Mit Zitat antworten Zitat
10. Okt 2012, 13:26
Dieses Thema wurde am "10. Oct 2012, 13:26 Uhr" von "SirThornberry" aus dem Forum "Netzwerke" in das Forum "Software-Projekte der Mitglieder" verschoben.
Benutzerbild von MrMooed
MrMooed

 
Delphi 7 Enterprise
 
#6
  Alt 15. Okt 2012, 16:08
Bin auch gerade auf der Suche nach einer Möglichkeit Daten zu übermitteln - wobei dein Projekt für mich wohl ein Paar Größenordnungen zu überdimensioniert ist

Könntest du evtl. eine .Exe hochladen ? Kann das Projekt leider nicht öffnen mit meinem Delphi7 (klappt auch nicht wenn ich, wie du schoneinmal geschrieben hast, WinApi.Windows in Windows umändere. Dann meckert er, dass eine Vcl.Forms.dcu fehlt ..)

Klingt auf jedenfall vielversprechend
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

 
Delphi 12 Athens
 
#7
  Alt 15. Okt 2012, 16:13
Kann das Projekt leider nicht öffnen mit meinem Delphi7 (klappt auch nicht wenn ich, wie du schoneinmal geschrieben hast, WinApi.Windows in Windows umändere. Dann meckert er, dass eine Vcl.Forms.dcu fehlt ..)
Dann entferne dort auch den Namespace

Mit XE2 wurden Namespaces für Units der RTL/VCL eingeführt.

System.SysUtils (System.SysUtils.pas bzw. System.SysUtils.dcu)
WinApi.Windows
WinApi.Messages
Vcl.Forms
Vcl.Dialogs
...

(in D2009 fing es mit den Units der Generics an, wo Punkte in Namen verwendet wurden)

Geändert von himitsu (15. Okt 2012 um 16:16 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

 
Delphi 10.3 Rio
 
#8
  Alt 16. Okt 2012, 01:02
@Zacherl:
Ich habe es mir gerade aus Neugier grob angeschaut.
Deinen Ansatz/Aufbau finde ich gut, erstmal
Bei mir hat alles ohne jegliche Fehler geklappt.

Als Anregung würde ich Support von verschiedenen Socketkomponenten
vorschlagen, aber das steht glaube ich auch schon auf Deiner ToDo-List,
wenn ich mich recht an die Kommentare erinnere.

Greetz Data

P.S.: wenn Du noch mehr Funktionen mit Demo einbaust teste ich gerne
  Mit Zitat antworten Zitat
Furtbichler
 
#9
  Alt 16. Okt 2012, 08:25
Praktisch.

Eine Frage:

Ist "Intelligenter Datenempfang" eine Alternative zur "Trennung von Datenpaketen"? Kann ich auch intelligent senden, also nicht nur Dateien, sondern auch Daten?
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

 
Delphi 10.2 Tokyo Starter
 
#10
  Alt 16. Okt 2012, 09:42
Erstmal danke fürs testen euch beiden

Als Anregung würde ich Support von verschiedenen Socketkomponenten
vorschlagen, aber das steht glaube ich auch schon auf Deiner ToDo-List,
wenn ich mich recht an die Kommentare erinnere.
Genau, das hatte ich schon geplant. Ich werde es wohl so handhaben, dass für den Sende Teil ein zusätzliches Event ausgelöst wird, in dem der User dann mit der Socket Komponente seiner Wahl die Daten abschickt. Der Empfangsteil sollte ja schon Socket unabhängig sein.

Ist "Intelligenter Datenempfang" eine Alternative zur "Trennung von Datenpaketen"? Kann ich auch intelligent senden, also nicht nur Dateien, sondern auch Daten?
Definitiv. Wobei ich den "Intelligenter Datenempfang" logisch eher zu den "Einfachen Dateiübertragungen" zuordnen würde. Zur genaueren Erklärung: Wenn du "normale" Daten, also keine Dateien sendest, wird intern die TdxIDTPBaseTransfer Klasse erzeugt. Dort werden deine Daten in einen Buffer kopiert und dann nach und nach vom Sende Thread losgeschickt. Jetzt kann man sich vorstellen, was passiert, wenn man versuchen würde auf diese Weise beispielsweise einen Film (sagen wir mehrere Gigabyte) zu übertragen. Damit in diesem Falle nicht erst alle Daten in den Speicher geladen werden müssen, wird für Dateitransfers die TdxIDTPFileTransfer Klasse verwendet, welche die übergebene Datei öffnet und bei jedem Cycle des Sende Threads die Daten dynamisch per ReadFile() ausliest und abschickt.
Beim Empfänger kommt dann der "Intelligente Datenempfang" ins Spiel. Hat man einfache Daten, sagen wir mal einen Steuerbefehl mit ein paar Parametern, würde man diesen ja gerne "in einem Rutsch" empfangen, ohne ggfls. erst die Teilpakete wieder zusammensetzen zu müssen. Für diesen Zweck gibt es im OnTransferInit Event den variablen Parameter AutoCollectData. Ist diese Funktion aktiviert, sammelt der IOHandler alle eingehenden Daten eines Transfers in einen Buffer und löst das OnTransferFinish Event erst bei vollständigem Eingang aller Daten aus. Für große Dateien macht dies natürlich keinen Sinn, da man hier schnell wieder Speicherprobleme bekommen würde. Außerdem will man bei einem Dateitransfer die Datei in der Regel auch auf Empfängerseite wieder als solche speichern und nicht im RAM behalten. Hier kann man dann AutoCollectData deaktivieren, was bewirkt, dass bei jedem Teilpaket das OnTransferData Event aufgerufen wird. Das erlaubt es dann die Daten z.b. analog zum Sender per WriteFile() wieder in einer Datei abzulegen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 16:42 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