Autor Beitrag
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 22.03.07 02:09 
Socket-Komponenten mit integriertem Protokoll-Adapter

Wer das Binär-Protokoll-Tutorial kennt, wird den verwendeten TProtocolAdapter bestimmt wiedererkennen (der allerdings hier bereits in einer weiterentwickelten Form vorliegt). Kenntnis des Tutorials wäre sicher sehr hilfreich bei der Verwendung der hier vorgestellten Komponenten, ist aber nicht zwingend notwendig.
  • TNBFPAClient
    Entspricht einem TClientSocket mit integriertem TProtocolAdapter

  • TNBFPAServer
    Entspricht einem TServerSocket mit integriertem TServerPA
Die Komponenten werden in die Palette der IDE installiert, können aber auch dynamisch verwendet werden. Im Projekt-Archiv ist eine ausführliche Anleitung zur Installation der Komponenten enthalten. Es ist übrigens nicht notwendig, die Socket-Komponenten (TClientSocket und TServerSocket) in der IDE installiert zu haben (somit stellen diese beiden Komponenten eine Möglichkeit dar, auch in PE-Delphi-Versionen wieder IDE-Integration für Sockets-basierte Komponenten zu bekommen).

Fortgeschrittene mit Kenntnis des oben erwähnten Binär-Protokoll-Tutorials werden sich sicherlich darüber freuen, die Anbindung an die Sockets nicht mehr "von Hand" machen zu müssen. Aber auch Anfänger in Sachen Netzwerk könn(t)en mit den vorgestellten Komponenten eine einfache Lösung für klassische Probleme bei der Kommunikation finden (Daten-Typen/-Pakete auseinanderhalten, Ereignisse korrekt handhaben), ohne den kompletten Hintergrund in allen Details kennen und beherrschen zu müssen.

Das Projekt-Archiv im Anhang dieses Beitrags enthält:
  • Den Quelltext der Komponenten TNBFPAClient und TNBFPAServer mit deren Hilfsklassen und Deklarationen in der Datei NarsesBFPA.pas
  • Eine Referenz-Dokumentation der Komponenten-API mit integriertem Quickstart-Tutorial und ausführlicher Installationsanleitung als PDF
  • Die Beispielprojektdateien des Quickstart-Tutorials und die fertigen Demo-Programme zum direkten Ausprobieren
Die nächsten netzwerkprogrammierungsbezogenen Tutorials von mir werden auf diesen Komponenten aufbauen, da hiermit die Netzwerkkommunikation über ein (proprietäres) Protokoll "kinderleicht" ist. ;)

History:

Änderungen in TNBFPA v1.20, Doku v1.06 vom 24.02.2010:
  • Nur Anpassungen für D2010 (Unicode, s.u.); Die Komponente sollte in D2k9 besser nicht verwendet werden, da hier dem Hersteller noch Fehler bei der Umstellung auf Unicode unterlaufen sind! Für Delphi-Versionen vor D2k9 sollte weiterhin die Version 1.12 verwendet werden!
  • Eine (wichtige) funktionale Änderung:
    ausblenden Delphi-Quelltext
    1:
    2:
    3:
    4:
    5:
    6:
    // Die Verbindungsliste des Servers hat sich geändert
    procedure TServerMain.NBFPAServer1ConnectionsChange(Sender: TObject);
    begin
    //  Clients.Items.Assign(NBFPAServer1.Connections); // in die GUI übernehmen - bisher
      NBFPAServer1.Connections.AssignTo(Clients.Items); // in die GUI übernehmen - neu ab der Version 1.20
    end;
    Da das Connections[]-Array jetzt kein Nachfahre von TStringList mehr ist (sondern von TAnsiStrList, was ja nicht kompatibel ist), muss man die Zuweisung per .Assign "umdrehen", s.o.
Änderungen in TNBFPA v1.12, Doku v1.06 vom 27.08.2008:
  • FIX: in TBaseCmdSeq.AddBuf() nur dann System.Move() aufrufen, wenn Size > 0 (ist eigentlich kein Fehler, aber löst eine Exception aus, wenn RangeCheck in den Compiler-Optionen aktiviert ist)
  • FIX: Schreiben auf TNBFPAServer.Active nicht an den internen ServerSocket weitergeben, sondern selbst in Open; und Close; auflösen --> führte dazu, dass das Connections-Array nicht geleert wurde
Änderungen in TNBFPA v1.11, Doku v1.06 vom 21.08.2007:
  • FIX: Anpassungen für D5, keine funktionalen Änderungen
Komplette Version-History im Quelltext.

cu
Narses
Einloggen, um Attachments anzusehen!
_________________
There are 10 types of people - those who understand binary and those who don´t.


Zuletzt bearbeitet von Narses am Mo 31.10.11 00:10, insgesamt 22-mal bearbeitet
Bullweih
Hält's aus hier
Beiträge: 2

WINXP
Delphi 6
BeitragVerfasst: Do 29.03.07 13:33 
Titel: Fehler in Delphi 6
Moin Moin

Habe Deine Komponente gezogen und mit Delphi 6 getestet.
Bekomme beim Compilieren den Fehler das er
FConnectionsRef.NameValueSeparator nicht kennt.
Ich gehe mal davon aus das es sich auch um FConnectionsRef.Delimiter handelt oder zumindestens ersetzt werden kann.

MfG
Bulli
Narses Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 29.03.07 23:07 
Moin!

user profile iconBullweih hat folgendes geschrieben:
mit Delphi 6 getestet.
Bekomme beim Compilieren den Fehler das er
FConnectionsRef.NameValueSeparator nicht kennt.
Ich gehe mal davon aus das es sich auch um FConnectionsRef.Delimiter handelt oder zumindestens ersetzt werden kann.

Nein, damit ist das Standard-Trennzeichen für den Zugriff über TStrings.Values[] gemeint (hat das D6 etwa noch nicht... :gruebel: muss mal am anderen Rechner forschen gehen... :oops:). Im Zweifel einfach FConnectionsRef.NameValueSeparator durch ein '=' ersetzen (tritt 2x auf: Zeile #1667 und #2432).

Ich lass mir mal was dazu einfallen... :?

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
chrisdrury
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 184

WinXP
D5 Prof
BeitragVerfasst: Fr 30.03.07 07:30 
Ist vielleicht auch an eine Version für Delphi 5 gedacht?
:wink:
Bullweih
Hält's aus hier
Beiträge: 2

WINXP
Delphi 6
BeitragVerfasst: Fr 30.03.07 08:30 
Titel: Jo Danke ...
für die schnelle Antwort.
Die Komponente funzt einwandfrei. Hatte noch keine Probleme damit auch mit sehr großen Datenmengen.
Was vorher leider nicht ging oder nur mit sehr großem Aufwand zu bewerkstelligen war.

Feine Sache das ...

MfG
Bullweih
Narses Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 30.03.07 11:05 
Moin!

user profile iconchrisdrury hat folgendes geschrieben:
Ist vielleicht auch an eine Version für Delphi 5 gedacht? :wink:

Ich hab kein D5... :? Hast du´s schon probiert? Wir können ja mal sehen, ob wir´s da auch zum Laufen kriegen. ;)



user profile iconBullweih hat folgendes geschrieben:
Jo Danke ... für die schnelle Antwort.

Bitte, war ja nur ein kleiner Eingriff für D6. ;)

user profile iconBullweih hat folgendes geschrieben:
Die Komponente funzt einwandfrei. Hatte noch keine Probleme damit auch mit sehr großen Datenmengen.
Was vorher leider nicht ging oder nur mit sehr großem Aufwand zu bewerkstelligen war.

Feine Sache das ...

Danke für das Lob! :D

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: So 01.04.07 22:32 
user profile iconNarses hat folgendes geschrieben:
Moin!

user profile iconchrisdrury hat folgendes geschrieben:
Ist vielleicht auch an eine Version für Delphi 5 gedacht? :wink:

Ich hab kein D5... :? Hast du´s schon probiert? Wir können ja mal sehen, ob wir´s da auch zum Laufen kriegen. ;)

Wenn der besagte Fehler unter D6 gefixt ist, sollte die Komponente auch problemlos auf D5 laufen. Hab auch zum Testen D4 da. Falls also die Kompatibilität soweit getrieben werden sollte ;-)
@Narses: NameValueSeparator gibt's unter D5 UND D6 nicht.

user profile iconNarses hat folgendes geschrieben:
user profile iconBullweih hat folgendes geschrieben:
Jo Danke ... für die schnelle Antwort.

Bitte, war ja nur ein kleiner Eingriff für D6. ;)

D.h. müsste jetzt auch mit D5 laufen.

user profile iconNarses hat folgendes geschrieben:
user profile iconBullweih hat folgendes geschrieben:
Die Komponente funzt einwandfrei. Hatte noch keine Probleme damit auch mit sehr großen Datenmengen.
Was vorher leider nicht ging oder nur mit sehr großem Aufwand zu bewerkstelligen war.

Feine Sache das ...

Danke für das Lob! :D

cu
Narses

Naja ... Werd wahrscheinlich demnächst auch ein kleines Protokoll darauf aufsetzen ... (Naja ... Mischung aus RFC2440 und dem Proto der Kompo ;-)

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
chrisdrury
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 184

WinXP
D5 Prof
BeitragVerfasst: Mo 02.04.07 08:11 
user profile iconNarses hat folgendes geschrieben:
Moin!

user profile iconchrisdrury hat folgendes geschrieben:
Ist vielleicht auch an eine Version für Delphi 5 gedacht? :wink:

Ich hab kein D5... :? Hast du´s schon probiert? Wir können ja mal sehen, ob wir´s da auch zum Laufen kriegen. ;)


Hallo Narses,
ich habe jetzt mal versucht, Deine Komponente unter D5 zu installieren.
Erste Fehlermeldung: siehe fehler.jpg im Anhang
Bei ftKeepAlive = 0 nur ftKeepAlive gesetzt, weiter geht's:

Zweite Fehlermeldung: siehe fehler1.jpg
PCardinal in Cardinal geändert, weiter:

Dritte Fehlermeldung: siehe fehler2.jpg
Undefinierter Bezeichner: GUIDToString, ComObj in uses eingefügt, weiter:

vierte Fehlermeldung: siehe fehler3.jpg
Zeigertyp erwartet, wat nu?:gruebel:
Einloggen, um Attachments anzusehen!
chrisdrury
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 184

WinXP
D5 Prof
BeitragVerfasst: Mo 02.04.07 08:12 
Anbei noch der vierte Fehler: :wink:
Einloggen, um Attachments anzusehen!
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mo 02.04.07 08:34 
PCardinal ist, wie der Name sagt, ein Zeiger auf einen Cardinal ...

Also:
ausblenden Delphi-Quelltext
1:
type PCardinal = ^Cardinal;					

einfügen am Anfang der Unit und deine eine Ersetzung rückgängig machen.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Born-to-Frag
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1094

Win XP SP2, Win 2000 SP4
Delphi 7, 2k5
BeitragVerfasst: Mo 02.04.07 09:48 
Moin!

Hast du wieder super gemacht, Narses :zustimm:
Werde es bei Gelegenheit mal ausführlich testen, hab im Moment leider nicht so viel Zeit (auch kaum aktiv hier :()


greetz


//Bin schon bissl am testen, und was mir natürlich gleich auffällt: Ich habe einen Client connecten lassen mit deinem altem BFPA -> Exception :shock:
Macht mir nix aus, nur eine Anmerkung ;)

_________________
Theorie ist wenn man alles weiß, aber nichts funktioniert. Praxis ist wenn alles funktioniert, aber niemand weiß warum.
Microsoft vereint Theorie und Praxis: Nichts funktioniert und niemand weiß warum.
Narses Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 02.04.07 10:34 
Moin!

user profile iconchrisdrury hat folgendes geschrieben:
Bei ftKeepAlive = 0 nur ftKeepAlive gesetzt

Jo, ist klar, vermerkt. ;)

user profile iconchrisdrury hat folgendes geschrieben:
PCardinal in Cardinal geändert

Argh! :shock: Hat D5 etwa keinen PCardinal im Angebot... Auf jeden Fall nicht durch Cardinal ersetzen, ist ja ein Zeigertyp (siehe user profile iconBenBEs Beitrag)!

Ich werd mich drum kümmern.

user profile iconchrisdrury hat folgendes geschrieben:
Undefinierter Bezeichner: GUIDToString, ComObj in uses eingefügt

OK, vermerkt. ;)

user profile iconchrisdrury hat folgendes geschrieben:
Zeigertyp erwartet

Folgefehler, s.o., ist damit erledigt. ;)



user profile iconBorn-to-Frag hat folgendes geschrieben:
Hast du wieder super gemacht, Narses :zustimm:

Danke, scheint aber noch etwas zu kinderkränkeln... :? ;)

user profile iconBorn-to-Frag hat folgendes geschrieben:
Bin schon bissl am testen, und was mir natürlich gleich auffällt: Ich habe einen Client connecten lassen mit deinem altem BFPA -> Exception :shock:

Uff, hatte ich auch probiert (klar, eigentlich ;) aber ohne Exception)... Details... wo genau... :?:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
chrisdrury
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 184

WinXP
D5 Prof
BeitragVerfasst: Mo 02.04.07 10:34 
Danke @ BenBE!
Jetzt läuft's auch unter Delphi 5!! 8) :P :dance2:
Born-to-Frag
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1094

Win XP SP2, Win 2000 SP4
Delphi 7, 2k5
BeitragVerfasst: Mo 02.04.07 14:28 
user profile iconNarses hat folgendes geschrieben:
user profile iconBorn-to-Frag hat folgendes geschrieben:
Bin schon bissl am testen, und was mir natürlich gleich auffällt: Ich habe einen Client connecten lassen mit deinem altem BFPA -> Exception :shock:

Uff, hatte ich auch probiert (klar, eigentlich ;) aber ohne Exception)... Details... wo genau... :?:


Hi,

war mein Fehler, funktioniert super! :autsch:
// es liegt daran, dass ich keinen client connecten lassen kann der das BFPA mit extra Socket Komponenten benutzt (zu alt schon? :D) Wenn du willst guck ich trotzdem nochmal genau wo der Fehler lag..

greetz

_________________
Theorie ist wenn man alles weiß, aber nichts funktioniert. Praxis ist wenn alles funktioniert, aber niemand weiß warum.
Microsoft vereint Theorie und Praxis: Nichts funktioniert und niemand weiß warum.
Narses Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 02.04.07 15:28 
Moin!

user profile iconBorn-to-Frag hat folgendes geschrieben:
war mein Fehler, funktioniert super! :autsch:

Schwitz... 8) OK, Danke für den Test. ;)

user profile iconBorn-to-Frag hat folgendes geschrieben:
es liegt daran, dass ich keinen client connecten lassen kann der das BFPA mit extra Socket Komponenten benutzt (zu alt schon? :D)

Ja, das steht aber auch in der Doku... :zwinker: rtfm... (duck weg) :P

Transportprotokoll-Header-Versionen:
BinProtoTut: 'NBFP10'
Kompo-Version: 'NBFP20'
:idea:

user profile iconBorn-to-Frag hat folgendes geschrieben:
Wenn du willst guck ich trotzdem nochmal genau wo der Fehler lag.

Wenn du Zeit hast; würde mich schon interessieren (ggfs. -> PN, scheint ja was spezifisches zu sein).

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
hui1991
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 433

Windows XP, WIndows Vista
Turbo Delphi Explorer| Delphi, PHP,Blitzbasic
BeitragVerfasst: Di 03.04.07 12:22 
Hi,

diese Komponente funktioniert auf meinem Delphi 7 eigentlich garnicht.
Der Fehler ist ich installiere es wie normal.
Schaue im Internet Register ob es da ist.
Sehe es ist da.
Danach schließe ich es.
Öffne eine neue Form und aufeinmal fehlt die Komponente.
Was soll ich tun das sie dauert da bleibt?
Neue installieren geht auch nicht.
Und ich weis net wo ich des Deinstallieren soll.

mfg
hui1991
Narses Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Di 03.04.07 12:30 
Moin!


user profile iconhui1991 hat folgendes geschrieben:
Was soll ich tun das sie dauert da bleibt?
Neue installieren geht auch nicht.
Und ich weis net wo ich des Deinstallieren soll.

Das sieht mir doch stark danach aus, dass sie bereits installiert ist, aber evtl. in einem anderen Registerbereich? :gruebel:

Du bist nach Anleitung in Kapitel 2 vorgegangen und hast auch eine Meldung der Art: "Als Ergebnis des Neucompilierens des installierten Packages..." bekommen?

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
hui1991
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 433

Windows XP, WIndows Vista
Turbo Delphi Explorer| Delphi, PHP,Blitzbasic
BeitragVerfasst: Di 03.04.07 12:48 
Nein das kam nicht:
"Als Ergebnis des Neucompilierens des installierten Packages..."

Hätte mir ja jemand sagen können das der Download unvollständig war.
Die PDF war bei mir garnet dabei.
Ich habe es etz runter geladen.
Und habe die PDF geöffnet.
Ich habe es nicht so gemacht.
Ich habe ein neues Package gemacht und die dort eingefügt und dann auf Installieren gedrückt.
Dann war sie da.
Nach delphi neustart war sie dann wieder weg.
Keine Ahnung warum das aufeinmal net geht.

Ich habe etz es so wie in der Anleitung gemacht und dann kam das hier:
"Als Ergebnis des Neucompilierens des installierten Packages..."
Blos in englisch ^^

Naja dann habe ich auf JA gedrückt und dann kam die Meldung das erfolgreich installiert ist
Ich habe es geschlossen und dann neue Application ausgewählt und siehe da es ist drin.

Naja Danke für deine Antwort hat mir eigentlich geholfen ^^
Ich teste es dann mal Später ^^

MfG
hui1991
Narses Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mi 04.04.07 12:12 
Moin!

Neue Version TNBFPA v1.03, Doku v1.01, Details siehe oben im 1. Beitrag.

Da ich kein D5 habe, wäre ich über einen Hinweis dankbar, ob es jetzt so "durchläuft". ;)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Fr 06.04.07 15:08 
Wünschenswerte Funktion für neue Releases:

- Protokoll-ID und Version über OI einstellbar (Sonst wären ja theoretisch alle Anwendungen miteinander kompatibel ;-))

- OnEncryptData \ OnDecryptData pro Datenblock (feste größe einstellbar \ an Framegrenzen) decodierbar (um z.B. teilweise verschlüsselte Kommunikation zu realisieren)

- Einstellbare adaptive Framegrößen-Übertragung (um ähnlich RFC2440 die für die Größenangabe benötigten Informationen zu reduzieren)

//Edit: Feature-Wunschliste ergänzt

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.