Einen TCP-Echo-Server erstellen
Gehen Sie die vollständige Implementierung eines TCP-Echo-Servers durch.
Einen TCP-Echo-Server erstellen ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 2 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.
Ziel
Erstellen Sie einen minimalen TCP-Server, der eine Verbindung akzeptiert, Bytes liest und sie zurückschreibt. Das „Hello World“ der Netzwerkprogrammierung.
Server-Grundgerüst
Der Ablauf eines Servers: Socket erstellen, binden, lauschen, akzeptieren, verarbeiten. Wiederholen Sie dies endlos.
int srv = socket(AF_INET, SOCK_STREAM, 0);
bind(srv, (sockaddr*)&addr, sizeof(addr));
listen(srv, 10);
while (true) {
int client = accept(srv, nullptr, nullptr);
handle(client);
close(client);
}Option zur Adresswiederverwendung
Setzen Sie SO_REUSEADDR, damit der Server sofort neu gestartet werden kann, ohne darauf zu warten, dass das Betriebssystem den Port freigibt.
int yes = 1;
setsockopt(srv, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(yes));Die Echo-Schleife
Lesen Sie in einen Puffer und schreiben Sie dieselben Bytes zurück. Beenden Sie die Schleife, wenn der Client die Verbindung schließt.
void handle(int client) {
char buf[1024];
while (true) {
ssize_t n = recv(client, buf, sizeof(buf), 0);
if (n <= 0) break; // closed or error
send(client, buf, n, 0);
}
}Unvollständige Lese- und Schreibvorgänge
Sowohl recv als auch send können weniger Bytes übertragen als angefordert. Bei einem streambasierten Protokoll müssen Sie wiederholen, bis der Vorgang abgeschlossen ist.
ssize_t total = 0;
while (total < n) {
ssize_t s = send(client, buf + total, n - total, 0);
if (s <= 0) break;
total += s;
}Mehrere Clients verwalten
Der einfachste Ansatz ist ein neuer Thread pro Verbindung. Das funktioniert für Hunderte von Clients, stößt bei Tausenden jedoch an seine Grenzen.
while (true) {
int client = accept(srv, nullptr, nullptr);
std::thread([client]{ handle(client); close(client); }).detach();
}Besser: Thread-Pool
Bei vielen Verbindungen verschwendet das Erzeugen eines Threads pro Verbindung Ressourcen. Ein Thread-Pool mit fester Größe und einer Arbeitswarteschlange skaliert besser.
Kontrolliertes Herunterfahren
Behandeln Sie SIGTERM/SIGINT, um den Listening-Socket sauber zu schließen. RAII stellt zusätzlich sicher, dass auch alle Client-Sockets geschlossen werden.
Fehlerbehandlung
Betrachten Sie Fehler als erwarteten Bestandteil: Clients trennen die Verbindung, Netzwerke haben kurzzeitige Störungen und die Betriebssystemlimits können erreicht werden. Protokollieren Sie den Fehler und fahren Sie fort – stürzen Sie nicht wegen eines fehlerhaften Clients ab.
Jeden Client protokollieren
Protokollieren Sie die entfernte Adresse zur besseren Beobachtbarkeit.
sockaddr_in remote{};
socklen_t len = sizeof(remote);
int client = accept(srv, (sockaddr*)&remote, &len);
char ip[INET_ADDRSTRLEN];
inet_ntop(AF_INET, &remote.sin_addr, ip, sizeof(ip));
std::cout << "client " << ip << ":" << ntohs(remote.sin_port);Mit netcat testen
Testen Sie Ihren Echo-Server interaktiv mit nc.
nc 127.0.0.1 8080
hello
hello # echoed backÜber Echo hinaus
Ausgehend von Echo können Sie Folgendes erweitern:
- Zeilenbasierte Protokolle (HTTP-ähnlich)
- Binärprotokolle mit Frames (Längenpräfix)
- JSON- oder Protobuf-Nachrichten
Kurztest
Welchem Zweck dient die Socket-Option SO_REUSEADDR?
Zusammenfassung
Ein minimaler TCP-Echo-Server verwendet socket, setsockopt SO_REUSEADDR, bind, listen und accept-in-loop. Für mehrere Clients können Sie Threads erzeugen oder einen Thread-Pool verwenden. Für hohe Skalierbarkeit wechseln Sie zu asynchronem I/O (in der nächsten Lektion).
Häufig gestellte Fragen
Ist die Lektion „Einen TCP-Echo-Server erstellen“ kostenlos?
Ja — der vollständige Text von „Einen TCP-Echo-Server erstellen“ 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 „Einen TCP-Echo-Server erstellen“?
Gehen Sie die vollständige Implementierung eines TCP-Echo-Servers durch. 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 2 von 4.
Wie lange dauert die Lektion „Einen TCP-Echo-Server erstellen“?
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