# [C++] Socket



## Padawan (30. März 2012)

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


----------



## saftmeister (30. März 2012)

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.


----------



## Jennesta (31. März 2012)

Zotteljedi ist sicher eine der besten Anlaufstellen. Ich habe seine Website zusammen mit dieser verwendet. Vielleicht hilft dir das zusätzlich.


----------



## Padawan (1. April 2012)

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


----------



## saftmeister (1. April 2012)

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:


```
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.


----------



## Matthias Reitinger (1. April 2012)

saftmeister hat gesagt.:


> ```
> class Socket
> {
> private int __socket;
> ...


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


----------

