Autor Beitrag
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10123
Erhaltene Danke: 1227

W2k .. W7pro .. W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mi 11.01.06 09:49 
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 So 21.02.10 00:49, insgesamt 35-mal bearbeitet

Für diesen Beitrag haben gedankt: anubis2k5, darius83, LuMa86, moggaz
Arno Nym
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 131



BeitragVerfasst: Mi 11.01.06 13:36 
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
Jojojoxx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 386



BeitragVerfasst: Mi 11.01.06 14:35 
Hi!

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

mfg

Jojo
Narses Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10123
Erhaltene Danke: 1227

W2k .. W7pro .. W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 19.01.06 13:26 
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
Seraph
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 163

Windows.:siXPack:.
Delphi7 Professional
BeitragVerfasst: Do 02.02.06 09:25 
Und wo bekomme ich die 2.00 Versionen der Sockets?
Narses Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10123
Erhaltene Danke: 1227

W2k .. W7pro .. W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 02.02.06 09:46 
Moin!

user profile iconSeraph 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
Seraph
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 163

Windows.:siXPack:.
Delphi7 Professional
BeitragVerfasst: Do 02.02.06 09:48 
Ja genau!
Zumindest nicht auf meiner Workstation!
(Delphi7)

Gruß
Seraph
Narses Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10123
Erhaltene Danke: 1227

W2k .. W7pro .. W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 02.02.06 09:50 
Moin!

Genau dafür gibt es einen entsprechenden Hinweis im Tut. :wink: Guckst du Suche in: Delphi-Forum, Delphi-Library 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.
Narses Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10123
Erhaltene Danke: 1227

W2k .. W7pro .. W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 13.02.06 01:43 
Moin!

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

cu
Narses
Hellcode
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 19

WinXP SP2
D7 Ent
BeitragVerfasst: So 19.02.06 17:07 
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!
Narses Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10123
Erhaltene Danke: 1227

W2k .. W7pro .. W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: So 19.02.06 23:07 
Moin!

Danke für das Lob! :D

user profile iconHellcode 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:

user profile iconHellcode 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:

user profile iconHellcode 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
Hellcode
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 19

WinXP SP2
D7 Ent
BeitragVerfasst: Mo 20.02.06 14:24 
Zitat:

user profile iconHellcode 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 user profile iconraziel: Überflüssige Zeilenumbrüche enternt.
snack
Hält's aus hier
Beiträge: 2

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

Man kann zumindest einige Ideen von dem relativ umfangreichen IRC-Protokoll abschauen.
BadAzz
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: Fr 24.02.06 21:49 
klappt das auch über internet oder nur im lokalen netzwerk?
Narses Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10123
Erhaltene Danke: 1227

W2k .. W7pro .. W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Sa 25.02.06 13:37 
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
Paddymann
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 58


Delphi 5 Professional
BeitragVerfasst: Do 09.03.06 16:01 
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
Narses Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10123
Erhaltene Danke: 1227

W2k .. W7pro .. W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Di 21.03.06 01:30 
Moin!

user profile iconPaddymann hat folgendes geschrieben:
Finde die Tutorials ebenfalls super!

Danke! :D

user profile iconPaddymann 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
ausblenden Delphi-Quelltext
1:
Clients.Items.AddObject()					
und
ausblenden Delphi-Quelltext
1:
Client.Items.Count					
runterbrechen. Schau mal, ob das so klappt.

cu
Narses
fidionael
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 232

Win XP SP2, Ubuntu 6.06
Delphi 7 PE, Delphi 3 Prof
BeitragVerfasst: Do 23.03.06 13:56 
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!
-Pl-
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 22

Win XP, Win Vista
Delphi 7
BeitragVerfasst: Do 23.03.06 21:23 
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
Narses Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10123
Erhaltene Danke: 1227

W2k .. W7pro .. W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 23.03.06 22:23 
Moin!

user profile icon-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. ;)

user profile icon-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