Netzwerk Protokoll



  • Hallo Programmierer,
    Ich schreibe momentan eine Server Software in c++ für ein Spiel. Ich habe erst vor ein paar wochen angefangen mit c++ zu programmieren.
    Könnte mir jemand ratschläge gegeben was ich beachten/schreiben muss das ich merke wenn ein client versucht dem Server zu beetreten?

    MFG Florian



  • Ich schreibe momentan eine Server Software in c++ für ein Spiel. Ich habe erst vor ein paar wochen angefangen mit c++ zu programmieren.

    Ganz schlechte Idee. Wie wär's, wenn du erst einmal etwas C++ übst, bevor du ausgerechnet sicherheitskritische Anwendungen schreibst?
    Zum Thema Sockets lies dich mal in die Boost Asio-Library ein, dann wirst du von alleine merken, dass du höchstwahrscheinlich noch nicht so weit bist.



  • Jodocus schrieb:

    Ich schreibe momentan eine Server Software in c++ für ein Spiel. Ich habe erst vor ein paar wochen angefangen mit c++ zu programmieren.

    Ganz schlechte Idee. Wie wär's, wenn du erst einmal etwas C++ übst, bevor du ausgerechnet sicherheitskritische Anwendungen schreibst?
    Zum Thema Sockets lies dich mal in die Boost Asio-Library ein, dann wirst du von alleine merken, dass du höchstwahrscheinlich noch nicht so weit bist.

    Wie kommst Du darauf, dass so eine Netzwerksoftware automatisch sicherheitskritisch ist? Ich muss ein solches Programm nicht zwangsweise nicht im Internet betreiben.

    Es ist sicher eine interessante Sache, Netzwerkprogrammierung mit C++ zu machen. Allerdings ist es alles andere als trivial. Aber warum nicht?



  • Deviron schrieb:

    Könnte mir jemand ratschläge gegeben was ich beachten/schreiben muss das ich merke wenn ein client versucht dem Server zu beetreten?

    Netzwerkkommunikation wird üblicherweise mit sog. Sockets gemacht.

    Dann gibt es zwei grundlegend unterschiedliche Spielarten: Stream-Protokolle (z.B. TCP/IP) und Paket-Protokolle (z.B. UDP/IP). Die Paket-Protokolle vergessen wir für den Anfang erstmal, das würde zu kompliziert.

    Bei Stream-Protokolle musst du einen Socket erzeugen ("socket()"), diesen an einen bestimmten Port auf dem Server binden ("bind()"), und dem System dann mitteilen dass du damit Verbindungen annehmen willst ("listen()").
    Und dann kannst du Verbindungen annehmen ("accept()").

    Wobei es zahlreiche Libraries gibt die einem einen Teil dieser Arbeit abnehmen bzw. das ganze etwas abstrahieren.

    Und dann gibt es noch verschiedene Möglichkeiten damit umzugehen dass man meist nicht nur einen Client gleichzeitig bedienen will, sondern mehrere.

    Das "alles andere als trivial" von tntnet kann ich aber bekräftigen. Es ist zwar keine Rocket-Science, aber man muss dazu einfach sehr viele Dinge wissen. Wenn man den Grossteil davon nicht als Vorkenntnisse mitbringt, dann ist es halt wirklich viel auf einmal.



  • tntnet schrieb:

    Jodocus schrieb:

    Ich schreibe momentan eine Server Software in c++ für ein Spiel. Ich habe erst vor ein paar wochen angefangen mit c++ zu programmieren.

    Ganz schlechte Idee. Wie wär's, wenn du erst einmal etwas C++ übst, bevor du ausgerechnet sicherheitskritische Anwendungen schreibst?
    Zum Thema Sockets lies dich mal in die Boost Asio-Library ein, dann wirst du von alleine merken, dass du höchstwahrscheinlich noch nicht so weit bist.

    Wie kommst Du darauf, dass so eine Netzwerksoftware automatisch sicherheitskritisch ist? Ich muss ein solches Programm nicht zwangsweise nicht im Internet betreiben.

    Es ist sicher eine interessante Sache, Netzwerkprogrammierung mit C++ zu machen. Allerdings ist es alles andere als trivial. Aber warum nicht?

    Der TE schrieb schon davon, dass es um ein Spiel geht, also mit an Sicherheit grenzender Wahrscheinlichkeit soll diese Anwendung auch mal vom Internet aus erreicht werden können.
    Es gibt schon mehr als genug unsicheren Netzwerkcode, besonders in C und C++. Wenn man C++ erst ein paar Wochen macht, ist es in der Regel keine gute Idee, mit Netzwerkprogrammierung anzufangen. Zusätzlich fangen die meisten dann mit BSD-Sockets an und schon geht das falsche Gefrickel mit recv und sprintf los. Die richtige Alternative sind die Libraries, aber die sind für Anfänger nicht unbedingt einfacher zu bedienen.
    Netzwerkprogrammierung ist einfach nichts für Anfänger einer Programmiersprache.



  • @Jodocus
    Mit den "Socket-Iostreams" von Boost.ASIO sollte es mehr oder weniger einfach gehen. Und auch mehr oder weniger einfach sein damit halbwegs sicheren Code zu schreiben.

    Der Knackpunkt ist natürlich: woher soll ein Anfänger wissen auf welche Art von Fehlern/Konstrukten er aufpassen muss?
    Wobei sich das dummerweise auf sämtliche Programme bezieht die Daten von irgendwo einlesen die ein Angreifer böswillig vorbereitet haben könnte. Man denke nur mal an den Exploit im JPEG Decoder von GDI+ *schauder*.



  • Das Network-Modul von SFML ist eventuell etwas einsteigerfreundlicher. Kenntnisse über Sockets braucht es so oder so, wobei man vielleicht einen Teil in den SFML-Tutorials lernen kann.

    www.sfml-dev.org



  • tntnet schrieb:

    Wie kommst Du darauf, dass so eine Netzwerksoftware automatisch sicherheitskritisch ist? Ich muss ein solches Programm nicht zwangsweise nicht im Internet betreiben.

    Natürlich ist es auch wichtig Anwendungen im lokalen Netz sicher zu machen. Schadsoftware macht doch nicht davor halt!!! Sicherheit scheint nicht gerade auf deinem Plan an erster Stelle zu stehen, das ist sehr gefährlich.


Anmelden zum Antworten