Autor |
Beitrag |
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: 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:
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| procedure TServerMain.NBFPAServer1ConnectionsChange(Sender: TObject); begin NBFPAServer1.Connections.AssignTo(Clients.Items); 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
|
Verfasst: 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 
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Do 29.03.07 23:07
Moin!
Bullweih 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...  muss mal am anderen Rechner forschen gehen...  ). 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
      
Beiträge: 184
WinXP
D5 Prof
|
Verfasst: Fr 30.03.07 07:30
Ist vielleicht auch an eine Version für Delphi 5 gedacht?

|
|
Bullweih
Hält's aus hier
Beiträge: 2
WINXP
Delphi 6
|
Verfasst: 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 
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Fr 30.03.07 11:05
Moin!
chrisdrury hat folgendes geschrieben: | Ist vielleicht auch an eine Version für Delphi 5 gedacht?  |
Ich hab kein D5...  Hast du´s schon probiert? Wir können ja mal sehen, ob wir´s da auch zum Laufen kriegen.
Bullweih hat folgendes geschrieben: | Jo Danke ... für die schnelle Antwort. |
Bitte, war ja nur ein kleiner Eingriff für D6.
Bullweih 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!
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: So 01.04.07 22:32
_________________ 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
      
Beiträge: 184
WinXP
D5 Prof
|
Verfasst: Mo 02.04.07 08:11
Narses hat folgendes geschrieben: | Moin!
chrisdrury hat folgendes geschrieben: | Ist vielleicht auch an eine Version für Delphi 5 gedacht?  |
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? 
Einloggen, um Attachments anzusehen!
|
|
chrisdrury
      
Beiträge: 184
WinXP
D5 Prof
|
Verfasst: Mo 02.04.07 08:12
Anbei noch der vierte Fehler: 
Einloggen, um Attachments anzusehen!
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Mo 02.04.07 08:34
PCardinal ist, wie der Name sagt, ein Zeiger auf einen Cardinal ...
Also:
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
      
Beiträge: 1094
Win XP SP2, Win 2000 SP4
Delphi 7, 2k5
|
Verfasst: Mo 02.04.07 09:48
Moin!
Hast du wieder super gemacht, Narses
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
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 
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 02.04.07 10:34
Moin!
chrisdrury hat folgendes geschrieben: | Bei ftKeepAlive = 0 nur ftKeepAlive gesetzt |
Jo, ist klar, vermerkt.
chrisdrury hat folgendes geschrieben: | PCardinal in Cardinal geändert |
Argh!  Hat D5 etwa keinen PCardinal im Angebot... Auf jeden Fall nicht durch Cardinal ersetzen, ist ja ein Zeigertyp (siehe BenBEs Beitrag)!
Ich werd mich drum kümmern.
chrisdrury hat folgendes geschrieben: | Undefinierter Bezeichner: GUIDToString, ComObj in uses eingefügt |
OK, vermerkt.
chrisdrury hat folgendes geschrieben: | Zeigertyp erwartet |
Folgefehler, s.o., ist damit erledigt.
Born-to-Frag hat folgendes geschrieben: | Hast du wieder super gemacht, Narses  |
Danke, scheint aber noch etwas zu kinderkränkeln...
Born-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  |
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
      
Beiträge: 184
WinXP
D5 Prof
|
Verfasst: Mo 02.04.07 10:34
Danke @ BenBE!
Jetzt läuft's auch unter Delphi 5!! 
|
|
Born-to-Frag
      
Beiträge: 1094
Win XP SP2, Win 2000 SP4
Delphi 7, 2k5
|
Verfasst: Mo 02.04.07 14:28
Narses hat folgendes geschrieben: | Born-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  |
Uff, hatte ich auch probiert (klar, eigentlich aber ohne Exception)... Details... wo genau...  |
Hi,
war mein Fehler, funktioniert super!
// es liegt daran, dass ich keinen client connecten lassen kann der das BFPA mit extra Socket Komponenten benutzt (zu alt schon?  ) 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 
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 02.04.07 15:28
Moin!
Born-to-Frag hat folgendes geschrieben: | war mein Fehler, funktioniert super!  |
Schwitz...  OK, Danke für den Test.
Born-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? ) |
Ja, das steht aber auch in der Doku...  rtfm... (duck weg)
Transportprotokoll-Header-Versionen:
BinProtoTut: 'NBFP10'
Kompo-Version: 'NBFP20'
Born-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
      
Beiträge: 433
Windows XP, WIndows Vista
Turbo Delphi Explorer| Delphi, PHP,Blitzbasic
|
Verfasst: 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 
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Di 03.04.07 12:30
Moin!
hui1991 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?
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
      
Beiträge: 433
Windows XP, WIndows Vista
Turbo Delphi Explorer| Delphi, PHP,Blitzbasic
|
Verfasst: 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 
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: 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
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: 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.
|
|