AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi SocketAdapter - Protokoll - Wie aufbauen?
Thema durchsuchen
Ansicht
Themen-Optionen

SocketAdapter - Protokoll - Wie aufbauen?

Ein Thema von Zacherl · begonnen am 12. Nov 2007 · letzter Beitrag vom 13. Nov 2007
Antwort Antwort
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

SocketAdapter - Protokoll - Wie aufbauen?

  Alt 12. Nov 2007, 21:31
Hey,

ich habe ein nettes Protokoll geschrieben mit dem sich Daten wunderbar über die normalen TCustomWinSockets versenden und empfangen lassen, ohne, dass die Pakete falsch getrennt oder zusammengesetzt werden. Auch eine on-the-fly Kompression und Verschlüsselung ist möglich.

Bisher muss der Programmierer für jedes Socket ein TBufferData Record anlegen und im OnClientRead Ereigniss "HandleSocketData(BufferData, Socket)" aufrufen. Wenn ein vollständiges Paket angekommen ist wird eine Callback Funktion für die ein Pointer im BufferData Record bereitssteht aufgerufen.

Das ganze kommt mir nun doch etwas kompliziert vor. Ich überlege nun aber, ob ich alle Funktionen in eine Klasse packen soll, oder ob ich in der Unit eine globale Liste erstelle, den Parameter der HandleData Funktion auf das Socket beschränke und das Erstellen / Ermitteln des dazugehörigen Records intern verwalte. Der Programmierer soll eigentlich nämlich auch keinen Zugriff auf die einzelnen Elemente erhalten.
Eine Klasse wäre dafür ganz nett, wenn ich mal so auf die private Deklarationen schiele, anderseits habe ich das Problem, dass ich einmal eine Klasse für die TCustomWinSockets machen will und die selbe Klasse nochmal für ein selbstdefiniertes TClientSocket Object. Bisher habe ich mir mit überladenen Funktionen geholfen. Geht dies auch in Klassen? Der Klasse würde das Socket im Constructor übergeben. Die Verwaltung der Klassen muss der Programmierer zwar weiterhin selbst vornehmen, aber die Datenverarbeitung würde sich auf ein Klasse.HandleData beschränken, wobei natürlich vom Programmierer darauf geachtet werden muss, welche Klasse zu welchem Socket gehört. Auch einfacher als die Callback Funktionen wären die klassichen OnBLABLABLA Methoden.

Welche Vorgehensweise würdet ihr empfehlen?

Gruß
  Mit Zitat antworten Zitat
Benutzerbild von Sko
Sko

Registriert seit: 11. Sep 2005
327 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: SocketAdapter - Protokoll - Wie aufbauen?

  Alt 12. Nov 2007, 21:36
In der Delphi-Library hat Narses ein interessantes Tutorial geschrieben das dir vielleicht helfen kann: [klick].
MfG Sko
Zitat von Phoenix:
[OT]Phoenix guckt in die Glaskugel, zuckt mit den Flügelspitzen, krächzt etwas von wegen 'Boden' und 'Scherben' und schubbst die Kugel in Richtung Tischkante.[/OT]
Rockbox
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: SocketAdapter - Protokoll - Wie aufbauen?

  Alt 12. Nov 2007, 21:45
Die klassische Methode wäre eine neue Komponente, die einen Socket in einem privaten Feld hat. Die Klasse verwaltet somit alles, für den Benutzer sieht es so ähnlich aus, als würde er die Sockets direkt verwenden. Es entfällt außerdem die Zuweisung von Events, die sowieso immer gleich sein sollen.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#4

Re: SocketAdapter - Protokoll - Wie aufbauen?

  Alt 12. Nov 2007, 21:51
@Sko: Das Protokoll ist nicht das Problem, das habe ich ja schon
@Apollonius: Daran habe ich auch schon gedacht, allerdings möchte ich kein TClientSocket oder TServerSocket kapseln, sondern beim TClientSocket das eine CustomWinSocket und beim TServerSocket ALLE CustomWinSockets die pro Verbindung erstellt werden. Die Daten dieser Verbindungen sollen daher auch getrennt abgearbeitet werden, wobei es möglich sein soll verschiedene Events / Callbacks zu vergeben.
  Mit Zitat antworten Zitat
BenjaminH

Registriert seit: 14. Okt 2004
Ort: Freiburg im Breisgau
713 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: SocketAdapter - Protokoll - Wie aufbauen?

  Alt 12. Nov 2007, 22:00
Zitat von Zacherl:
beim TClientSocket das eine CustomWinSocket und beim TServerSocket ALLE CustomWinSockets
Das würde durch einen Class Helper(spätestens ab D2k6 möglich) drin sein. Damit wird das für alle TCustomWinSockets in deinem Programm gelten.
Benjamin
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#6

Re: SocketAdapter - Protokoll - Wie aufbauen?

  Alt 13. Nov 2007, 15:11
Klingt interessant. Gibt es dafür eine Demo?
  Mit Zitat antworten Zitat
BenjaminH

Registriert seit: 14. Okt 2004
Ort: Freiburg im Breisgau
713 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: SocketAdapter - Protokoll - Wie aufbauen?

  Alt 13. Nov 2007, 15:25
Ich hab nur ein Anwendungsbeispiel im Kopf.
Du willst der Klasse TPanel eine Funktion hinzufügen, um z.B. es ein und ausklappen zu können.
Delphi-Quellcode:
TFader = class helper for TPanel
  published
    procedure FadeIn;
    procedure FadeOut;
end;

procedure TFader.FadeIn;
Begin

End;
Ab da hat jedes Panel diese Prozeduren, die dann direkt über
TPanel.FadeIn; aufgerufen werden können.
Benjamin
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#8

Re: SocketAdapter - Protokoll - Wie aufbauen?

  Alt 13. Nov 2007, 16:57
Perfekt Danke dir .. werde ich direkt mal testen.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#9

Re: SocketAdapter - Protokoll - Wie aufbauen?

  Alt 13. Nov 2007, 18:01
Um ein ähnliches Problem habe ich mir auch schon Gedanken gemacht.
Angenommen man möchte EMails per SMTP versenden.
Sobald der Socket offen ist, benötigt man ja nur noch Lese- und Schreibfunktionen.
Welcher Art von Socket oder ob man über einen Proxyserver geht oder die Daten verschlüsselt ist ja mal egal.
Man könnte sich auch folgendes Szenarios vorstellen:
Code:
SMTP-Protokoll <---> [HTTP Packer/Entpacker] <---> [TCP Socket] <-> Netzwerk
SMTP-Protokoll <---> [Secure Socket Layer] <--> [Serielle Schnittstelle]
An den Stellen, die mit "<--->" gekennzeichnet sind, besteht eine bidirektionale Schreib-/Leseverbindung.
Ich nenne dies mal eine "Pipeline".
Die Pipeline könne man über folgendes Interface implementieren:
Delphi-Quellcode:
  IPipeline = interface;
  IPipelineCallback = interface(IUnknown)
     procedure DataAvailable(Sender:IPipeline);
  end;

  IPipeline = interface(IUnknown)
      function Read(var Buffer; Count: Longint): Longint;
      function Write(const Buffer; Count: Longint): Longint;
      function GetReadSize: Integer; // Anzahl der Bytes, die mit Read gelesen werden können
      procedure SetCallBack(cb:IPipelineCallback);
  end;
Damit der Benutzer von IPipeline nicht ständig fragen muss, ob Daten zum Lesen vorhanden ist, gibt es das Interface IPipelineCallback.
Mit diesem Ansatz könnte man nun Blöcke hintereinander schalten.
Code:
SMTP-Protokoll <---> [StreamCompressor/Dekompressor] <---> TCP Socket
Der StreamCompressor/Dekompressor würde also einerseits das Interface IPipeline implementieren, damit es vom
SMTP-Protokoll benützt wird,
andererseits benützt es ein IPipeline-Interface, das von TCP Socket implementiert wird.
Auf diese Weise entsteht ein Baukastensystem, deren Teile man zu Ketten zusammenschalten kann.
Andreas
  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 06: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