Delphi-Forum.de Delphi-Library.de
C-Sharp-Forum.de C-Sharp-Library.de
Registrieren Login Suche Hilfe Sitemap
Terminatorzeichen-Protokoll-Tutorial / 1 (Sockets) v4.00
spacer
Autor Nachricht
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Moderator

Beiträge: 6998
Dabei seit: 25.07.2004
Wohnort: Gelsenkirchen

W2k, WXPpro
D6pe, D7pro
BeitragVerfasst am: Mi 11.01.06 09:49  Antworten mit Zitat Beitrag melden
Narses´ Netzwerk-Tutorials - Navigation
  1. FAQ-Beitrag: Socket-Komponenten nachinstallieren (ab D7)
  2. Netzwerk-Basics - Minimaler Chat für Anfänger
  3. hier :arrow: Terminatorzeichen-Protokoll - Grundlagen (Teil 1)
  4. Terminatorzeichen-Protokoll - Erweiterungen (Teil 2)
  5. Binär-Protokoll - Für Fortgeschrittene
  6. Netzwerk-Spiel - Multiplayer TicTacToe
  7. UDP LAN-Chat - Der Chat ohne Server
Terminatorzeichen-Protokoll-Tutorial Teil 1 - Grundlagen

Was ist ein Kommunikations-Protokoll?

In diesem Tutorial wird ausführlich und für Anfänger in Sachen "Netzwerk" geeignet erläutert, was ein Kommunikations-Protokoll ist, wie man ein eigenes Protokoll entwickelt und wozu man sowas gebrauchen kann. Es baut auf den TServerSocket-/TClientSocket-Komponenten auf.

Warum sollte ich mir dieses Tutorial ansehen?
  • Ich habe schon einen eigenen Chat programmiert, aber ich habe Probleme mit den Zusatzfunktionen (Nickname setzen, IP-Adressen abfragen, Flüstern, etc.). Wie setzt man das vernünftig um?
    Genau das wird hier direkt am Beispiel behandelt; bei Problemen dieser Art wirkt ein Protokoll wahre Wunder!

  • Ich möchte mein Spiel netzwerkfähig machen, wie geht das!?
    Die Kommunikation einer Spielanwendung unterscheidet sich prinzipiell nur sehr wenig von einem Chat: statt der menschlichen Teilnehmer tauschen eben die Anwendungen Informationen über den aktuellen Spielstand aus. Deshalb ist dieses Tutorial als Grundlage für eigene netzwerkfähige Spiele sehr gut geeignet.

  • Ich habe schon ein eigenes Protokoll ("Befehle" und "Daten" in der Kommunikation) entwickelt. Aber irgendwie kriege ich das nicht stabil zum Laufen!? Es gibt häufig Datensalat beim Empfangen...
    Vermutlich verwendest du die Ereignisse der Socketkomponenten zum Trennen der Datenpakete - ein weit verbreiteter Irrtum! Hier wird ausführlich erklärt, warum das nicht klappt und wie man das Problem lösen kann.
In diesem Zusammenhang:

  • RemoteFileExplorer
    Hier ist ein Beispielprojekt auf Basis dieses Tutorials. Aufgabe war es, das Dateisystem des Servers am Client durchsuchen zu können. Im Quelltext kann man die praktische Anwendung eines Protokolls wie im Tutorial vorgestellt "in der Praxis" sehen.

  • FAQ-Beitrag: Probleme beim Versenden von records
    Hier ist ein FAQ-Beitrag, der ausführlich erläutert, warum es eine sehr gute Idee ist, die Finger vom Versenden von records zu lassen und statt dessen lieber auf ein Protokoll zu setzen.

  • FAQ-Beitrag: Warum gibt es kein .ReceiveStream bei den Sockets?
    Dieser FAQ-Beitrag erläutert ausführlich, warum es keine .ReceiveStream-Methode bei den Socket-Komponenten gibt.


Viel Erfolg damit,

cu
Narses


History:

Änderungen in V4.00 vom 22.09.2006: -Milestone-Edition-
Da dieses Tutorial sich konkret an Anfänger in Sachen Netzwerk richtet, habe ich es an einem hoffentlich strategisch günstigen Punkt in zwei Teile aufgeteilt (was die größte Änderung in dieser Version darstellt). Die komplette Version-History sprengt den Rahmen dieses Beitrags...
Hinweis: Ältere Versionen heißen möglicherweise noch "Protokoll-Chat-Tutorial". Im Rahmen der Entwicklung hat sich aber die Namensänderung ergeben, da mir der alte Name zu ungenau war. Diese veralteten Versionen können bedenkenlos "entsorgt" und durch die aktuelle Version ersetzt werden.

Kommentare zum Tut sind hier durchaus erwünscht!

Falls die Anhänge unten nicht angezeigt werden, Seite (ggfs. auch mehrfach) neu laden.
Einloggen, um Attachments anzusehen!
_________________
There are 10 types of people - those who understand binary and those who don´t.


Zuletzt bearbeitet von Narses am Di 13.11.07 10:51, insgesamt 34-mal bearbeitet
Private Nachricht sendenPosting in privater Nachricht zitieren
Arno Nym
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star

Beiträge: 131
Dabei seit: 13.07.2005



BeitragVerfasst am: Mi 11.01.06 13:36  Antworten mit Zitat Beitrag melden
Hi,
das hast du wirklich gut gemacht ! Hab das pdf eben mal schnell überflogen, scheint wirklich alles wichtige drin zu sein, obs funktioniert habe ich noch nicht getestet, aber du ja sicherlich :)
Dank deiner Hilfe werden jetzt sicher ein paar posts weniger zu diesem Thema nötig sein. Bin zwar selbst nicht unbedingt darauf angewiesen, aber als Einsteiger vor ein paar jahren hätte ich so ein walkthrough selbst gut gebrauchen können.
Also Danke nochmal das du dir soviel Mühe gemacht hast !
(Im Forum wird eh zu wenig gelobt..immer nur an kleinigkeiten rumgenörgelt :)
Deswegen nochmal ein Lob und viele Grüße:
Arno Nym
Private Nachricht sendenPosting in privater Nachricht zitieren
Jojojoxx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star

Beiträge: 376
Dabei seit: 22.05.2005



BeitragVerfasst am: Mi 11.01.06 14:35  Antworten mit Zitat Beitrag melden
Hi!

Vielen Dank!!!!
Werd mir das in den nächsten Tage auch mal zu Gemüte führen! :D

mfg

Jojo
Private Nachricht sendenPosting in privater Nachricht zitieren
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Moderator

(Threadstarter)

Beiträge: 6998
Dabei seit: 25.07.2004
Wohnort: Gelsenkirchen

W2k, WXPpro
D6pe, D7pro
BeitragVerfasst am: Do 19.01.06 13:26  Antworten mit Zitat Beitrag melden
Moin!

Neue Version V2.00! Details, wie immer, im ersten Posting. Es hat sich wirklich sehr viel geändert, ist auf jeden Fall einen zweiten Blick wert! :D

cu
Narses
Private Nachricht sendenPosting in privater Nachricht zitieren
Seraph
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star

Beiträge: 163
Dabei seit: 21.09.2005
Wohnort: Planet Erde

Windows.:siXPack:.
Delphi7 Professional
BeitragVerfasst am: Do 02.02.06 09:25  Antworten mit Zitat Beitrag melden
Und wo bekomme ich die 2.00 Versionen der Sockets?
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Moderator

(Threadstarter)

Beiträge: 6998
Dabei seit: 25.07.2004
Wohnort: Gelsenkirchen

W2k, WXPpro
D6pe, D7pro
BeitragVerfasst am: Do 02.02.06 09:46  Antworten mit Zitat Beitrag melden
Moin!

Seraph hat folgendes geschrieben:
Und wo bekomme ich die 2.00 Versionen der Sockets?

:gruebel:

Ich kann dir nicht folgen, hast du die TServerSocket/TClientSocket-Kompos nicht, oder was meinst du?

cu
Narses
Private Nachricht sendenPosting in privater Nachricht zitieren
Seraph
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star

Beiträge: 163
Dabei seit: 21.09.2005
Wohnort: Planet Erde

Windows.:siXPack:.
Delphi7 Professional
BeitragVerfasst am: Do 02.02.06 09:48  Antworten mit Zitat Beitrag melden
Ja genau!
Zumindest nicht auf meiner Workstation!
(Delphi7)

Gruß
Seraph
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Moderator

(Threadstarter)

Beiträge: 6998
Dabei seit: 25.07.2004
Wohnort: Gelsenkirchen

W2k, WXPpro
D6pe, D7pro
BeitragVerfasst am: Do 02.02.06 09:50  Antworten mit Zitat Beitrag melden
Moin!

Genau dafür gibt es einen entsprechenden Hinweis im Tut. :wink: Guckst du Suche in: Delphi-Forum.de, Delphi-Library.de DCLSOCKETS70.BPL

cu
Narses

//EDIT: Es gibt jetzt (V2.01) auch ein eigenes Kapitel im Tut, das ausführlich zeigt, wie man die Sockets nachinstalliert.
Private Nachricht sendenPosting in privater Nachricht zitieren
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Moderator

(Threadstarter)

Beiträge: 6998
Dabei seit: 25.07.2004
Wohnort: Gelsenkirchen

W2k, WXPpro
D6pe, D7pro
BeitragVerfasst am: Mo 13.02.06 01:43  Antworten mit Zitat Beitrag melden
Moin!

Neue Version 2.01 released. Details, wie immer, im ersten Posting.

cu
Narses
Private Nachricht sendenPosting in privater Nachricht zitieren
Hellcode
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star

Beiträge: 19
Dabei seit: 17.09.2004
Wohnort: Münster

WinXP SP2
D7 Ent
BeitragVerfasst am: So 19.02.06 17:07  Antworten mit Zitat Beitrag melden
Erstmal vorweg: Sehr gutes Tutorial! Die Protokollfragen behandelst du sehr ausführlich und kompetent. Allerdings finde ich, auch wenn es in dem Tut hauptsächlich ums Protokoll und die Technik geht, solltest du, gerade wenn du Anfänger ansprichst, nicht die Details vernachlässigen. Zum Beispiel sollte es den "IP?"-Button meiner Meinung aus Sicherheitsgründen niemals im Client einbauen. Auf die tatsächliche IP der Chatter sollte nur der Server Zugriff haben. Ausserdem sollte immer eine Sperre des für Systemnachrichten konstanten Nickname eingerichtet werden, soll heißen, ein Client sollte sich nicht (in diesem Falle) "System" nennen können. Sind ja nun wirklich keine großen Angelegenheiten, und somit auch nicht schwer zu coden. Ich habe dein Tutorial muss ich gestehen nicht ganz gelesen, vielleicht gehst du auf die von mir angesprochenen Probleme ja an den entsprechenden Stellen ein. Trotzdem: Ausgesprochen gutes Tutorial, was ganz und gar kein weiteres Sandkorn im Strand der vielen Socket/Internet-Programmierung-Tuts darstellt!
Private Nachricht sendenPosting in privater Nachricht zitieren
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Moderator

(Threadstarter)

Beiträge: 6998
Dabei seit: 25.07.2004
Wohnort: Gelsenkirchen

W2k, WXPpro
D6pe, D7pro
BeitragVerfasst am: So 19.02.06 23:07  Antworten mit Zitat Beitrag melden
Moin!

Danke für das Lob! :D

Hellcode hat folgendes geschrieben:
den "IP?"-Button meiner Meinung aus Sicherheitsgründen niemals im Client einbauen. Auf die tatsächliche IP der Chatter sollte nur der Server Zugriff haben.

Die IP deines PCs im Internet ist kein Geheimnis, sonst könntest du ja gar nicht Kommunizieren. Wenn du Angst hast, dass jemand mit deiner IP was "böses" anstellt, dann solltest du dir eine vernünftige Firewall anschaffen. :wink: IMHO ist das kein sicherheitsrelevantes Problem, für die Sicherheit ist jeder PC-Betreiber schon selbst zuständig. Du kannst meine IP gerne jederzeit haben, es wird dir nix nutzen... :wink:

Hellcode hat folgendes geschrieben:
Ausserdem sollte immer eine Sperre des für Systemnachrichten konstanten Nickname eingerichtet werden, soll heißen, ein Client sollte sich nicht (in diesem Falle) "System" nennen können.

Danke für den Hinweis, hier ist er genau richtig. Wer das Tut als Ansatz für ein reales System einsetzen möchte, kann den Hinweis auch sicher gut gebrauchen. Allerdings ist er im Tut nicht relevant, da, wie du schon richtig erkannt hast, es dort um das Protokoll und die Technik geht. Die Nicknames spielen genau genommen keine Rolle und der Server ist eigentlich gar nicht als Frontend zur Kommunikation vorgesehen, was auch so im Tut klar dargestellt ist. Das Thema geht schnell viel tiefer, und das ist das Problem: wenn der Name "System" nicht zulässig sein soll, dann wäre auch gleich eine komplette Benutzerverwaltung notwendig, die ebenfalls doppelte Nicks ausschließt usw. - das führt aber viel zu weit und lenkt vom Thema Protokoll ab. :wink:

Hellcode hat folgendes geschrieben:
Ich habe dein Tutorial muss ich gestehen nicht ganz gelesen

Vielleicht solltest du das nachholen... :wink: (was, wenn da tatsächlich auch noch was Neues für dich drin stehen sollte... ?)

Trotzdem nochmal vielen Dank für dein Lob!

cu
Narses
Private Nachricht sendenPosting in privater Nachricht zitieren
Hellcode
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star

Beiträge: 19
Dabei seit: 17.09.2004
Wohnort: Münster

WinXP SP2
D7 Ent
BeitragVerfasst am: Mo 20.02.06 14:24  Antworten mit Zitat Beitrag melden
Zitat:

Hellcode hat folgendes geschrieben:
Ich habe dein Tutorial muss ich gestehen nicht ganz gelesen

Vielleicht solltest du das nachholen... :wink: (was, wenn da tatsächlich auch noch was Neues für dich drin stehen sollte... ?)


Son Schwachsinn :dance:

Nein, im ernst das Tutorial zeigt mir das du sehr viel Ahnung hast, da kann ich mir auf jeden nochwas abschneiden. :flehan: Ich werds mir nochmal ganz durchlesen!

Moderiert von raziel: Überflüssige Zeilenumbrüche enternt.
Private Nachricht sendenPosting in privater Nachricht zitieren
snack
Hält's aus hier

Beiträge: 2
Dabei seit: 21.02.2006


Win XP
Delphi 5 Prof.
BeitragVerfasst am: Di 21.02.06 19:08  Antworten mit Zitat Beitrag melden
Vielleicht fehlt als Ausblick noch ein Hinweis auf IRC (Internet Relay Chat),
dass unter RFC 1458 (http://www.ietf.org/rfc/rfc1459.txt) zu finden ist.

Man kann zumindest einige Ideen von dem relativ umfangreichen IRC-Protokoll abschauen.
Private Nachricht sendenPosting in privater Nachricht zitieren
BadAzz
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star

Beiträge: 33
Dabei seit: 01.10.2005



BeitragVerfasst am: Fr 24.02.06 21:49  Antworten mit Zitat Beitrag melden
klappt das auch über internet oder nur im lokalen netzwerk?
Private Nachricht sendenPosting in privater Nachricht zitieren
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Moderator

(Threadstarter)

Beiträge: 6998
Dabei seit: 25.07.2004
Wohnort: Gelsenkirchen

W2k, WXPpro
D6pe, D7pro
BeitragVerfasst am: Sa 25.02.06 13:37  Antworten mit Zitat Beitrag melden
Moin!

user profile iconBadAzz hat folgendes geschrieben:
klappt das auch über internet oder nur im lokalen netzwerk?

Das sollte auch über das Internet klappen; wenn ein (DSL-)Router im Einsatz ist, braucht der Server noch ein Portforwarding (heißt manchmal auch "virtual Server"), sonst kommen die Clients nicht ran.

Das UDP-Chat-Tut läuft (so wie dort mit Broadcasts realisiert) nur im LAN.

cu
Narses


Zuletzt bearbeitet von Narses am Di 26.05.09 22:14, insgesamt 1-mal bearbeitet
Private Nachricht sendenPosting in privater Nachricht zitieren
Paddymann
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star

Beiträge: 58
Dabei seit: 18.09.2005



Delphi 5 Professional
BeitragVerfasst am: Do 09.03.06 16:01  Antworten mit Zitat Beitrag melden
hoI!
Finde die Tutorials ebenfalls super!

Habe aber jetzt beim WinSocketTutorial das Problem, dass er mir beim Compilieren des Server-Parts eine Fehlermeldung ausgibt. Nämlich:
UndefinierterBezeichner:'AddItem'
UndefinierterBezeichner:'Count'
Er bezieht sich dabei auf den Code Clients.AddItem... bzw. Clients.Count... der ListBox.

Kann mir da jemadn helfen? Ich benutze Delphi5 Professional, vllt hat das damit ja was zu tun.

mfg
patti
Private Nachricht sendenPosting in privater Nachricht zitieren
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Moderator

(Threadstarter)

Beiträge: 6998
Dabei seit: 25.07.2004
Wohnort: Gelsenkirchen

W2k, WXPpro
D6pe, D7pro
BeitragVerfasst am: Di 21.03.06 01:30  Antworten mit Zitat Beitrag melden
Moin!

Paddymann hat folgendes geschrieben:
Finde die Tutorials ebenfalls super!

Danke! :D

Paddymann hat folgendes geschrieben:
UndefinierterBezeichner:'AddItem'
UndefinierterBezeichner:'Count'
Er bezieht sich dabei auf den Code Clients.AddItem... bzw. Clients.Count... der ListBox.
[...]
Ich benutze Delphi5 Professional, vllt hat das damit ja was zu tun.

Kann sein, dass D5 das noch nicht kann, dann mußt du das mit Clients.Items.AddObject() und Client.Items.Count runterbrechen. Schau mal, ob das so klappt.

cu
Narses
Private Nachricht sendenPosting in privater Nachricht zitieren
fidionael
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star

Beiträge: 231
Dabei seit: 26.10.2005
Wohnort: Recklinghausen

Win XP SP2, Ubuntu 6.06
Delphi 7 PE, Delphi 3 Prof
BeitragVerfasst am: Do 23.03.06 13:56  Antworten mit Zitat Beitrag melden
Das Tutorial ist bestimmt spitze und nachdem ich es mir durchgelesen hab, bin ich zum Schluß gekommen, dass es auch das mit Abstand am besten strukturierte und verständlichste in dieser Richtung ist, das mir bis jetzt untergekommen ist :)

Leider habe ich ein kleines Problem bei der Anwendung dessen was du so beschreibst, das Problem habe ich hier beschrieben.

Schonmal vielen Dank!
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
-Pl-
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star

Beiträge: 22
Dabei seit: 19.01.2006
Wohnort: Hamburg

Win XP, Win Vista
Delphi 7
BeitragVerfasst am: Do 23.03.06 21:23  Antworten mit Zitat Beitrag melden
Hi,

ich hab das Tutorial jetzt zu 3/4 durchgearbeitet und ich find es (bis auf einige kleine Schönheitsfehler in der Orientierung) wirklich sehr sehr gut, ich bin gut mitgekommen habe alles soweit verstanden (und ich bin noch nicht soo gut ;) ).

Wo ich allerdings Probleme habe ist diese neue Unit zu finden, die is bei mir nämlich nicht im Delphi Ordner ...

Fazit: Einsame Spitze !!

Pl
Private Nachricht sendenPosting in privater Nachricht zitieren
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Moderator

(Threadstarter)

Beiträge: 6998
Dabei seit: 25.07.2004
Wohnort: Gelsenkirchen

W2k, WXPpro
D6pe, D7pro
BeitragVerfasst am: Do 23.03.06 22:23  Antworten mit Zitat Beitrag melden
Moin!

-Pl- hat folgendes geschrieben:
ich find es (bis auf einige kleine Schönheitsfehler in der Orientierung) wirklich sehr sehr gut, ich bin gut mitgekommen habe alles soweit verstanden (und ich bin noch nicht soo gut ;) ).

Danke für das Lob! :D Wenn es auch gerade für Anfänger hilfreich ist, habe ich mein Ziel erreicht. ;)

-Pl- hat folgendes geschrieben:
Wo ich allerdings Probleme habe ist diese neue Unit zu finden, die is bei mir nämlich nicht im Delphi Ordner ...

Ähm, sprichst du jetzt von den Socket-Komponenten? Welche Delphi-Version du verwendest, hast du übrigens auch noch nicht "verraten"... ;)

cu
Narses
Private Nachricht sendenPosting in privater Nachricht zitieren
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
Beiträge vom vorherigen Thema anzeigen:   
home home