0Pricing
C++ Academy · Lektion

BSD-Sockets-API in C++

Verwenden Sie socket, bind, listen, accept, connect, send und recv in C++-Programmen.

BSD-Sockets-API in C++ ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C++ Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.

Was ist die Sockets-API?

Die BSD-Sockets-API ist der De-facto-Standard für Netzwerkprogrammierung. Sie ist unter Linux, macOS und den BSDs verfügbar sowie (mit geringfügigen Anpassungen) unter Windows über Winsock.

Erforderliche Header

Binden Sie die Plattform-Header ein und verwenden Sie POSIX-Typen.

#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>

Einen Socket erstellen

Der Aufruf socket gibt einen Dateideskriptor zurück. Übergeben Sie die Adressfamilie (IPv4), den Typ (TCP oder UDP) und das Protokoll (0 für den Standard).

int sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock < 0) {
    perror("socket");
    return 1;
}

Adressstrukturen

struct sockaddr_in enthält eine IPv4-Adresse und einen Port. Wandeln Sie den Typ beim Übergeben an Funktionen in struct sockaddr* um.

struct sockaddr_in addr{};
addr.sin_family = AF_INET;
addr.sin_port = htons(8080);
inet_pton(AF_INET, "127.0.0.1", &addr.sin_addr);

Byte-Reihenfolge: Host vs. Netzwerk

Die Netzwerk-Byte-Reihenfolge ist Big-Endian. Verwenden Sie htons, htonl, ntohs und ntohl zur Konvertierung.

Einen Client verbinden

Verwenden Sie connect, um eine TCP-Verbindung zu initiieren.

if (connect(sock, (sockaddr*)&addr, sizeof(addr)) < 0) {
    perror("connect");
    close(sock);
    return 1;
}

Senden und Empfangen

send und recv übertragen Bytes. Beide können weniger als die angeforderte Anzahl zurückgeben – arbeiten Sie daher immer in einer Schleife.

const char* msg = "Hello";
send(sock, msg, strlen(msg), 0);

char buffer[1024];
ssize_t n = recv(sock, buffer, sizeof(buffer)-1, 0);
buffer[n] = '\0';

Binden und Lauschen (Server)

Ein Server bindet sich an eine Adresse, lauscht und akzeptiert Verbindungen.

int srv = socket(AF_INET, SOCK_STREAM, 0);
bind(srv, (sockaddr*)&addr, sizeof(addr));
listen(srv, 10);
int client = accept(srv, nullptr, nullptr);

Den Socket schließen

Rufen Sie unter Unix close und unter Windows closesocket auf.

close(sock);

Fehlerbehandlung

Socket-Funktionen geben bei einem Fehler -1 zurück und setzen errno. Prüfen Sie jeden Rückgabewert.

In RAII kapseln

Ungekapselte Dateideskriptoren können leicht verloren gehen. Kapseln Sie sie in einem RAII-Typ mit einem Aufruf von close im Destruktor – oder verwenden Sie std::unique_ptr mit einem benutzerdefinierten Deleter.

struct SocketCloser {
    void operator()(int* fd) const { if (*fd >= 0) ::close(*fd); }
};
using UniqueSocket = std::unique_ptr<int, SocketCloser>;

Windows-Unterschiede

Unter Windows:

  • Binden Sie <winsock2.h> ein und verknüpfen Sie ws2_32
  • Rufen Sie vor der Verwendung WSAStartup auf
  • Verwenden Sie statt close closesocket
  • Der Socket-Typ ist SOCKET (unsigned)

Kurztest

Welcher Funktionsaufruf initiiert eine TCP-Verbindung von einem Client zu einem Server?

Zusammenfassung

Die BSD-Sockets-API stellt grundlegende Netzwerkfunktionen auf niedriger Ebene bereit. Erstellen Sie einen Socket, konfigurieren Sie eine Adresse und verbinden Sie sich als Client oder verwenden Sie als Server bind+listen+accept. Konvertieren Sie die Byte-Reihenfolge mit der htons-Familie. Kapseln Sie Deskriptoren in RAII, um Leaks zu verhindern.

Häufig gestellte Fragen

Ist die Lektion „BSD-Sockets-API in C++“ kostenlos?

Ja — der vollständige Text von „BSD-Sockets-API in C++“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C++ Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „BSD-Sockets-API in C++“?

Verwenden Sie socket, bind, listen, accept, connect, send und recv in C++-Programmen. Du übst C++ Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um C++ Academy zu starten?

Keine Vorkenntnisse erforderlich. C++ Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.

Wie lange dauert die Lektion „BSD-Sockets-API in C++“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser C++ Academy-Lektion Code schreiben und ausführen?

Ja. Jede C++ Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. BSD-Sockets-API in C++
  2. Einen TCP-Echo-Server erstellen
  3. Asynchrones I/O mit epoll und kqueue
  4. Modernes asynchrones I/O mit Boost Asio
← Zurück zu C++ Academy