Einstieg Netzwerkprogrammierung



  • Hallo zusammen.

    Ich wollte mal nachfragen, welche Methoden ihr zur Netzwerkprogrammierung empfehlt. Ich schreibe meine Programme momentan ausschließlich für Windows und könnte dazu die Windows API nutzen (also mit Winsocks). Als zweite Möglichkeit fällt mir da boost-asio ein. Nun bin ich jedoch unentschlossen und kenne mich nicht gut genug aus um zu entscheiden welcher Weg der bessere ist. Vielleicht habt ihr ja auch noch einen ganz anderen Vorschlag. Ich möchte anfangs Variablen zum Beispiel zu einem Server senden, diese dort bearbeiten und zurück senden lassen. Später möchte ich auf dem Wissen aufbauen können. Was empfehlt ihr mir?

    Vielen Dank für eure Antworten 🙂



  • Boost.Asio! Mir würde spontan kein vernünftiger Grund einfallen, sich da mit der C-API herum zu schlagen.



  • Zhavok schrieb:

    Ich möchte anfangs Variablen zum Beispiel zu einem Server senden, diese dort bearbeiten und zurück senden lassen.

    Das hört sich im Prinzip nach der Problematik hinter Remote Procedure Call an. Das solltest Du dir evtl durchlesen und die diversen existierenden Techniken zu Gemüte führen.
    Ist für ein kleines Programm natürlich totaler overkill.
    Kann aber später trotzdem nützlich sein.

    Ansonsten wie mein Vorredner: Boost.asio. Sich mit Sockets rumschlagen (vor allem darf man ja die Fehlerbehandlung nicht vergessen!) ist einfach nur grauenhaft.



  • Andererseits solltest du sehr wohl mal kurz die C-API ausprobieren, damit du ein bisschen ein Gefühl dafür bekommst, wie das unter der Haube aussieht und funktioniert.

    Ich empfehle immer noch Beej's Guide to Network Programming um sich ein fundamentales Wissen der Socketprogrammierung anzueignen.



  • Vielen Dank für eure Antworten. Habe mir fast gedacht, dass es auf Boost hinaus läuf^^. Ein bischen habe ich schon reingeschnuppert stateofmind. Und ich kann mich schließlich auch nicht darauf verlassen, dass jedes Programm was ich mir mal anschaue oder womit ich arbeiten möchte mit boost-asio funktioniert. Zumindest etwas fundamentales Wissen werde ich mir dazu auch aneignen.

    Also nochmal vielen Dank an alle 👍



  • scrontch schrieb:

    Das hört sich im Prinzip nach der Problematik hinter Remote Procedure Call an. Das solltest Du dir evtl durchlesen und die diversen existierenden Techniken zu Gemüte führen.
    Ist für ein kleines Programm natürlich totaler overkill.

    Solche plattformspezifischen Techniken würde ich nicht empfehlen. Besser ist immer REST in Kombination mit Json.

    @Zhavok: Du kannst dir auch mal Qt anschauen. Was mir an Qt gefällt ist, dass alles aus einem Guss kommt. Das Qt-Wissen kannst du dir auch bei anderen Qt-Bereichen anwenden.

    Wenn du mal eine Arbeitsstelle mit C++ hast, wird fast immer Qt verwendet. Insofern ist das immer nützlich, wenn man Qt-Wissen angeben kann.



  • Ich habe mich jetzt mal mit Boost Asio beschäftigt und verliebe mich nach und nach mehr in Boost. Kleine Frage die mir dazu noch einfällt: Werden beim Datenaustausch grundsätzlich bevorzugt chars benutzt?

    QT steht schon längst auf meiner Liste 🙂 (Zumindest was die Programmierung mit GUIs anbetrifft) Und mit GUIs habe ich noch nicht angefangen, weil ich mich noch nicht bereit dazu fühle. Ich will erst einmal mit vielen Dingen in C++ allgemein klar kommen. Wenn ich eine gewisse Sicherheit mit allem verspüre, werde ich mir das Thema mal anschauen. Aber ich denke, dass wird noch ne ganze Weile dauern^^. Mit C++ habe ich erst seit Oktober zu tun und das ist die erste Sprache die ich lerne. Arbeitstechnisch werde ich eher nicht damit zu tun haben. Ich mache das alles nur als Hobby 😃



  • Zhavok schrieb:

    Ich habe mich jetzt mal mit Boost Asio beschäftigt und verliebe mich nach und nach mehr in Boost. Kleine Frage die mir dazu noch einfällt: Werden beim Datenaustausch grundsätzlich bevorzugt chars benutzt?

    Ja, immer! Sonst musst du mit Big- und Litte-Endian spielen.

    QT steht schon längst auf meiner Liste 🙂 (Zumindest was die Programmierung mit GUIs anbetrifft) Und mit GUIs habe ich noch nicht angefangen, weil ich mich noch nicht bereit dazu fühle. Ich will erst einmal mit vielen Dingen in C++ allgemein klar kommen. Wenn ich eine gewisse Sicherheit mit allem verspüre, werde ich mir das Thema mal anschauen.

    Qt ist verdammt geil, weil es so umfangreich und einfach einfach ist. Das wirst schon schaffen. Durch das neue connect() / disconnect() liebe ich Qt5 sogar.



  • Naja, in meinem C++ Buch stand, man soll erst mit QT anfangen, wenn man sich gut auskennt. Und ich muss auch sagen, ich habe letzte Woche erst mit Boost angefangen und will erstmal zuviel Input vermeiden.


  • Administrator

    Zhavok schrieb:

    Naja, in meinem C++ Buch stand, man soll erst mit QT anfangen, wenn man sich gut auskennt. Und ich muss auch sagen, ich habe letzte Woche erst mit Boost angefangen und will erstmal zuviel Input vermeiden.

    Wenn ich das mal so sagen darf: Das ist eine sehr kluge Entscheidung!



  • Danke 😃

    Ich habe nochmal 2 Fragen.

    1. Werden beim Datenaustausch grundsätzlich bevorzugt chars benutzt? Mir ist das bei den Beispielen von der WinAPI und Boost::Asio aufgefallen.

    2. Thema sicherer Chat. Ich habe mir jetzt die letzeten Tag ein Frage gestellt und muss diese endlich stellen, weil es mir keine Ruhe lässt:

    Ich baue eine Verbindung auf. Es gibt keinen Server dazwischen, bedeutet es wird nur von mir zu einem anderen Rechner gesendet. Nun möchte ich aber, dass die Daten "sicher" übertragen werden. Ich verschlüssele die Daten bei mir (AES), schicke diese dann zur Gegenstelle. Diese entschlüsselt dann und kann die Nachricht lesen. Sagen wir mal niemand hat Zugang unseren beiden Rechnern und wir haben auch keinerlei Schadsoftware drauf. Das Passwort zur Verschlüsselung haben wir uns einfach mal mündlich ausgemacht und kann über eine config jederzeit geändert werden. Kann man dann sagen, dass unser Chat "sicher" ist? Also ich bin mir eigentlich im klaren, dass ich das viel zu naiv betrachte und sicher noch einiges mehr getan werden muss. Allerdings fällt mir (aufgrund, dass ich Anfänger bin) keine Möglichkeit ein, wie ein dritter an unserer Daten kommt. Hier nochmal die Fakten zusammengefasst:

    - Kein Server in der Mitte
    - Es wird keine Schadsoftware benutzt
    - Niemand kommt an die Chatanwendung
    - Nachrichten werden vor dem verschicken AES verschlüsselt und bei der Gegenseite entschlüsselt
    - Passwort zur Verschlüsselung wurde nur mündlich ausgetauscht


  • Administrator

    Zu 1: Ein char ist üblicherweise in C++ 8 Bits und damit entsprechend einem Byte. Sobald du Rohdaten austauschen willst, wird dies meistens über char Zeiger gemacht. Ganz grob zusammengefasst.

    Zu 2: Sicherheit ist ein RIESIGES Thema und unglaublich komplex. Ich wage mich diesbezüglich fast gar nicht zu einer Aussage, weil es so unglaublich gefährlich ist. Für ein Anfängerprogramm darf man vielleicht sagen, dass deine Methode ... "sicher" ... ist.

    Nur schon als Beispiel, AES ist nicht gleich AES. Nicht nur die Schlüssellänge ist entscheidend. Die verschiedenen Parameter von AES können massive Auswirkungen haben. Zum Beispiel was für eine Block Cipher gewählt wird. Auf Wikipedia gibt es diesbezüglich ein schönes Beispiel, falls ECB gewählt wird: https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Electronic_Codebook_(ECB)

    Und es gibt noch vieles mehr zu beachten!

    Mit Sicherheitsthemen ist nicht zu spassen. Wenn man etwas sicher haben will, unbedingt Experten dazu holen. Oder sich entsprechend fortbilden, aber das ist nichts, was man mal kurz über Nacht lernt.


Log in to reply