Autor |
Beitrag |
Narses
Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mi 11.01.06 09:49
Narses´ Netzwerk-Tutorials - Navigation
- FAQ-Beitrag: Socket-Komponenten nachinstallieren (ab D7)
- Netzwerk-Basics - Minimaler Chat für Anfänger
- hier Terminatorzeichen-Protokoll - Grundlagen (Teil 1)
- Terminatorzeichen-Protokoll - Erweiterungen (Teil 2)
- Binär-Protokoll - Für Fortgeschrittene
- Netzwerk-Spiel - Multiplayer TicTacToe
- 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
Beiträge: 131
|
Verfasst: 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
Beiträge: 386
|
Verfasst: Mi 11.01.06 14:35
Hi!
Vielen Dank!!!!
Werd mir das in den nächsten Tage auch mal zu Gemüte führen!
mfg
Jojo
|
|
Narses
Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: 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!
cu
Narses
|
|
Seraph
Beiträge: 163
Windows.:siXPack:.
Delphi7 Professional
|
Verfasst: Do 02.02.06 09:25
Und wo bekomme ich die 2.00 Versionen der Sockets?
|
|
Narses
Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Do 02.02.06 09:46
Moin!
Seraph hat folgendes geschrieben: | Und wo bekomme ich die 2.00 Versionen der Sockets? |
Ich kann dir nicht folgen, hast du die TServerSocket/TClientSocket-Kompos nicht, oder was meinst du?
cu
Narses
|
|
Seraph
Beiträge: 163
Windows.:siXPack:.
Delphi7 Professional
|
Verfasst: Do 02.02.06 09:48
Ja genau!
Zumindest nicht auf meiner Workstation!
(Delphi7)
Gruß
Seraph
|
|
Narses
Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Do 02.02.06 09:50
Moin!
Genau dafür gibt es einen entsprechenden Hinweis im Tut. Guckst du 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
Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 13.02.06 01:43
Moin!
Neue Version 2.01 released. Details, wie immer, im ersten Posting.
cu
Narses
|
|
Hellcode
Beiträge: 19
WinXP SP2
D7 Ent
|
Verfasst: 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
Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: So 19.02.06 23:07
Moin!
Danke für das Lob!
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. 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...
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.
Hellcode hat folgendes geschrieben: | Ich habe dein Tutorial muss ich gestehen nicht ganz gelesen |
Vielleicht solltest du das nachholen... (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
Beiträge: 19
WinXP SP2
D7 Ent
|
Verfasst: Mo 20.02.06 14:24
|
|
snack
Hält's aus hier
Beiträge: 2
Win XP
Delphi 5 Prof.
|
Verfasst: 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
Beiträge: 33
|
Verfasst: Fr 24.02.06 21:49
klappt das auch über internet oder nur im lokalen netzwerk?
|
|
Narses
Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Sa 25.02.06 13:37
Moin!
BadAzz 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
Beiträge: 58
Delphi 5 Professional
|
Verfasst: 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
Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Di 21.03.06 01:30
Moin!
Paddymann hat folgendes geschrieben: | Finde die Tutorials ebenfalls super! |
Danke!
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 Delphi-Quelltext 1:
| Clients.Items.AddObject() | und Delphi-Quelltext runterbrechen. Schau mal, ob das so klappt.
cu
Narses
|
|
fidionael
Beiträge: 232
Win XP SP2, Ubuntu 6.06
Delphi 7 PE, Delphi 3 Prof
|
Verfasst: 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-
Beiträge: 22
Win XP, Win Vista
Delphi 7
|
Verfasst: 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
Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Do 23.03.06 22:23
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! 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
|
|