[C++] Socket

Padawan

Erfahrenes Mitglied
Hallo alle zusammen,

ich soll ein Echo-Server in C++ unter Linux Programmieren und hab keine Ahnung von Socket Programmierung. Deswegen wollte ich fragen, ob ihr eine gute Seite kennt, wo man es lernen kann.
Ich hatte etwas über Wrapper in C++ gelesen, was hat es sich damit auf sich?

Grüße
Padawan
 
Meiner Meinung nach ist zotteljedi dafür immer noch die beste Quelle. Ist zwar C aber für das Grundverständnis, wie Sockets arbeiten gibt's IMHO keine bessere deutsche Anleitung mit Beispielen und teilweise tiefen Einstieg in die Materie.
 
danke an alle, die seite ist sehr hilfreich.
ich hab noch eine frage, ich hatte von sogenanten Wrapper gelesen. Was hat es sich damit aufsich? kan man die Wrapper als sog. Klassen bezeichnin, die sich in einer "extra datei" befinden?

vg
Padawan
 
Ein Wrapper ist in der Regel ein Stück Programmcode, welcher primitive Datentypen weg kapselt. Ein Socket ist erstmal nichts weiter als ein Deskriptor für eine Resource. Wenn du mit Dateien gearbeitet hast, kennst du vielleicht den Deskriptor FILE.

Jetzt gibt es Leute, die wollen das Standardverhalten wegkapseln, um eine höhere Abstraktion einführen zu können. Beispiel dafür wäre:

ClassSocket
|
|----- ClassClientSocket
------ ClassServerSocket

Felix geht in den "Voraussetzungen" auch auf C++ ein und darauf, das schon viele Leute versucht haben, eine Socket-Klasse zu bauen, statt die Systemcalls zu verwenden und ihm bisher nicht bekannt geworden ist, das es jemandem zufriedenstellend gelungen wäre.

Prinzipiell läuft das jedoch so ab: Man erstellt sich den Prototypen für die Klasse und definiert private und öffentliche Methoden/Eigenschaften. Im Falle Sockets könnte das so aussehen:

C++:
class Socket
{
  private int __socket;

  private std::string __ip;

  private int __port;

  public Socket(std::string IP, int Port);

  public void connect();

  ... weitere Methoden ...
};

Ich schreibe bewusst hier nur ein Beispiel, wie es aussehen könnte und keine fertige einsetzbare Lösung. Denn das Erstellen einer Wrapper-Klasse erfordert viel Erfahrung mit der zugrunde liegenden Technologie und es ist sehr viel sinnvoller, sich erstmal mit den Systemcalls an sich zu beschäftigen.

Erst wenn du verstanden hast, wie Sockets arbeiten, macht es evtl. Sinn eine Wrapper-Klasse zu bauen, um C++-Konform zu programmieren.
 
:offtopic:
C++:
class Socket
{
  private int __socket;

  private std::string __ip;

  private int __port;

  public Socket(std::string IP, int Port);

  public void connect();

  ... weitere Methoden ...
};
Dein Benennungsschema für Member-Variablen ist nicht portabel und daher gefährlich. Alle Bezeichner mit zwei aufeinanderfolgenden Unterstrichen sind reserviert und können vom Compiler für beliebige Zwecke verwendet werden. Siehe auch http://stackoverflow.com/questions/...s-about-using-an-underscore-in-a-c-identifier

Grüße,
Matthias
 
Zurück