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 Siews2_32 - Rufen Sie vor der Verwendung
WSAStartupauf - Verwenden Sie statt
closeclosesocket - 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
- BSD-Sockets-API in C++
- Einen TCP-Echo-Server erstellen
- Asynchrones I/O mit epoll und kqueue
- Modernes asynchrones I/O mit Boost Asio