[C++] Netzwerkprogrammierung? (Bücher)

07/02/2012 22:04 Terreox#1
Hallo Leute,
ich wende mich heute mit einer Frage an euch :)
Ich würde gern in nächster Zeit mit der Netzwerkprogrammierung in C++ anfangen und suche Resourcen zum Selbststudium.
Ich hab schon viele online tutorials gesehen die speziell an die WinSocks gerichtet waren. Dazu hätte ich direkt mal eine Frage.
Gibt es nur den einen Weg über OS-interne Mittel im Netz zu kommunizieren? Ich möchte mich nicht so gerne auf ein OS beschränken und bei Netzwerkprogrammierung habe ich nicht so viel Ahnung, aber muss man wirklich für jedes System, auf das man die Software laufen lassen will, die entsprechenden Sockets benutzen? Ich stell mir das ziemlich aufwendig vor, wenn man z.B. für Linux, Win und Mac entwickeln will und drei z.T. verschiedene Programme liefern muss.

Zu meiner zweiten Frage: Gibt es gute Bücher für die Netzwerkprogrammierung in C++, die ihr empfehlen könnt. Ich arbeite gern mit Büchern und mag die z.T. schlecht geschriebenen Online Tuts nicht wirklich.

Danke schonmal im Vorraus! :D
07/03/2012 08:46 Xijezu#2
Um dir die Frage mit den OS-Internen Mitteln zu beantworten:

Es gibt auch Plattformunabhängige Frameworks, wie z.B. QT oder GTK+.
QT zum Beispiel beinhaltet auch die Socketprogrammierung, diese ist aber, von dem was ich bisher gesehen habe, nicht wirklich umfangreich, aber komplett ausreichend.
07/03/2012 11:10 Mashkin#3
Im Netz gibt es dazu schon einige Threads und Posts.

Die meistegenannten Mittel sind:
  • Boost.Asio
    [Only registered and activated users can see links. Click Here To Register...]
  • Apache Portable Runtime (APR)
    [Only registered and activated users can see links. Click Here To Register...]
  • und die BSD Socket API
    Dabei gilt aber zu beachten, dass Zeit und Aufwand nötig sind, um die den Code an systemspezifische Eigenheiten anzupassen (versch. Socket-Datentypen, Parameter etc.)
Ich weiß nicht genau, ob ich hier Links von anderen, gewissermaßen "konkuruierenden" Seiten einstellen darf, deswegen überlasse ich dir die Suche (sollte recht schnell gehen).
07/03/2012 11:34 Terreox#4
Vielen Dank an euch 2 für eure Antworten :)

@Xijezu: Ich programmiere selber mit Qt seit einiger Zeit, nur noch nie mit Netzwerkanbindung. Mein Ziel ist es allerdings auch ohne Frameworks programmieren zu können. Ein Framework vereinfacht zwar vieles, aber ich lerne auch gerne die Wege ohne Frameworkhilfe kennen.

@M@shkin: Danke für die Hinweise, werde mir die Themen mal zu Gemüte führen :)
07/03/2012 11:44 Rainvair#5
Ich kann dir C++ von A bis Z empfehlen, ist ein relativ gutes Nachschlagewerk (gerade wenn man C++ schon kann.) im Buch ist auch eine größeres Kapitel der Netzwerkprogrammierung gewidmet.
07/03/2012 12:47 tnd0#6
Also entweder du schreibst dein eigenes Framework/wrapper oder du musst wohl für jedes OS anderen Code schreiben. Auf Windows gibts keine unix sockets und überall anders gibts keine WinSocks. Und da die meisten netzwerkprogramme mit multithreading wesentlich performanter arbeiten als singlethreaded musst du dann auch noch einen wrapper für windows und posix threads schreiben.

Edit: ja, du musst die OS-spezifischen sockets verwenden. die wiederrum sind dafür da, das du nicht direkt mit der netzwerkkarte bzw. dem netzwerktreiber reden musst, denn der ist je nach netzwerkkarte unterschiedlich.
07/04/2012 00:27 MrSm!th#7
Mal nur als Einwurf:

Winsocks unterscheiden sich kaum von Linux Sockets.

Du kannst zwar mit Frameworks eine Abstraktion schaffen, aber letztendlich basiert alles immer auf dem OS, denn das bietet nunmal die Schnittstelle zur Hardware.
Du könntest dir das ganze natürlich auch selbst mit ein paar #ifdefs zusammenbauen, sodass du für jedes OS ne kleine Lib hast, aber da machen umfangreiche FWs schon mehr Sinn, da sie sicherer, effizienter und halt auch komfortabler sind.
Man muss ja nicht immer das Rad neuerfinden.
Da hast du dann halt nur das Problem, dass du ggf. Lizenzen beachten musst.

Quote:
und drei z.T. verschiedene Programme liefern muss.
Das musst du sowieso immer, da sich die Formate von ausführbaren Dateien unterscheiden. Das bleibt dir auch bei Frameworks nicht erspart, du musst dein Programm für jedes OS neukompilieren.
Sie nehmen dir halt nur die Abstraktion von den OS Mitteln ab, d.h. du musst den Code nicht mit #ifdefs zukleistern bzw. für jedes OS neuschreiben.

Quote:
mein Ziel ist es allerdings auch ohne Frameworks programmieren zu können. Ein Framework vereinfacht zwar vieles, aber ich lerne auch gerne die Wege ohne Frameworkhilfe kennen.
Dann kommst du natürlich nicht drum rum, die OS Möglichkeiten zu kennen.
Ich rate dir dennoch, dass du das nur zum Lernen so handhabst. Wenn es dann ums produktive Programmieren geht, solltest du lieber auf gute und bekannte FWs setzen, anstatt alles selbst zu machen.
07/04/2012 11:46 Terreox#8
Quote:
Originally Posted by MrSm!th View Post

Das musst du sowieso immer, da sich die Formate von ausführbaren Dateien unterscheiden. Das bleibt dir auch bei Frameworks nicht erspart, du musst dein Programm für jedes OS neukompilieren.
Das war mir auch klar :D

Danke für die ausführliche Erklärung, werde erstmal mit Qt weiterarbeiten und mir nebenbei die ganzen Winsocks/Unix-Sockets Geschichten anschauen.