0Pricing
C Academy · Lektion

TCP-Client

Verbinden und senden

TCP-Client ist eine kostenlose C Academy-Lektion auf CoddyKit. Dies ist Lektion 3 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.

Einen TCP-Client erstellen

Ein TCP-Client stellt eine Verbindung zu einem Server her und sendet und empfängt anschließend Daten. Sein Lebenszyklus ist kürzer als der des Servers: Socket erstellen, verbinden, kommunizieren und schließen.

Schritt 1: Den Socket erstellen

Erstellen Sie wie beim Server einen Stream-Socket für IPv4-TCP.

#include <sys/socket.h>
#include <stdio.h>

int make_client_socket(void) {
    int fd = socket(AF_INET, SOCK_STREAM, 0);
    if (fd < 0) perror("socket");
    return fd;
}

Schritt 2: Den Server beschreiben

Füllen Sie eine sockaddr_in-Struktur mit dem Port und der IP-Adresse des Servers. Verwenden Sie inet_pton, um die IP-Adresse als Zeichenkette in Punktnotation in die Binärform umzuwandeln.

#include <arpa/inet.h>
#include <netinet/in.h>

int set_server(struct sockaddr_in *addr, const char *ip, unsigned short port) {
    addr->sin_family = AF_INET;
    addr->sin_port = htons(port);
    return inet_pton(AF_INET, ip, &addr->sin_addr); /* 1 on success */
}

Schritt 3: Verbinden

connect() führt den TCP-Handshake mit dem Server durch. Bei Erfolg ist der Socket für die Datenübertragung bereit; bei einem Fehler wird errno gesetzt, etwa bei einer abgelehnten Verbindung.

#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>

int do_connect(int fd, struct sockaddr_in *addr) {
    if (connect(fd, (struct sockaddr *)addr, sizeof *addr) < 0) {
        perror("connect"); return -1;
    }
    return 0;
}

Kein Binden erforderlich

Clients überspringen bind normalerweise: Der Kernel weist während connect automatisch einen flüchtigen Quellport zu. Einen Client binden Sie nur, wenn Sie einen bestimmten Quellport benötigen.

Schritt 4: Daten senden

Schreiben Sie nach dem Verbindungsaufbau mit send eine Anfrage. Verwenden Sie eine Schleife, um sicherzustellen, dass der gesamte Puffer gesendet wird.

#include <sys/socket.h>
#include <string.h>

int send_all(int fd, const char *data) {
    size_t left = strlen(data);
    const char *p = data;
    while (left > 0) {
        ssize_t n = send(fd, p, left, 0);
        if (n <= 0) return -1;
        p += n; left -= (size_t)n;
    }
    return 0;
}

Schritt 5: Die Antwort empfangen

Lesen Sie die Antwort des Servers mit recv. Fügen Sie ein Nullzeichen an das Ende an, bevor Sie den Puffer als Zeichenkette behandeln.

#include <sys/socket.h>
#include <stdio.h>

void read_reply(int fd) {
    char buf[512];
    ssize_t n = recv(fd, buf, sizeof buf - 1, 0);
    if (n > 0) { buf[n] = 0; printf("server said: %s\n", buf); }
    else if (n == 0) printf("server closed connection\n");
}

Lesen bis zum Schließen der Verbindung

Ein einzelner Aufruf von recv liefert möglicherweise nicht die vollständige Antwort. Lesen Sie in einer Schleife, bis recv 0 zurückgibt, also der Kommunikationspartner die Verbindung geschlossen hat, um eine in mehreren Teilen eintreffende Antwort vollständig zu lesen.

#include <sys/socket.h>
#include <stdio.h>

void drain(int fd) {
    char buf[256]; ssize_t n;
    while ((n = recv(fd, buf, sizeof buf, 0)) > 0)
        fwrite(buf, 1, (size_t)n, stdout);
}

Schritt 6: Schließen

Rufen Sie close(fd) auf, um die Verbindung zu beenden und den Deskriptor freizugeben. Dadurch wird ein TCP-FIN gesendet und der Server erfährt, dass der Client fertig ist.

#include <unistd.h>

void finish(int fd) {
    close(fd);
}

Halbseitiges Schließen mit shutdown

shutdown(fd, SHUT_WR) schließt nur die Schreibrichtung und signalisiert das Ende der Anfrage, während der Client weiterhin die Antwort lesen kann. Das ist bei Protokollen nützlich, die nach einer Anfrage eine Antwort liefern.

Umgang mit Verbindungsfehlern

Häufige Client-Fehler: ECONNREFUSED (kein Server lauscht), ETIMEDOUT (Host nicht erreichbar) und EHOSTUNREACH. Prüfen Sie stets connect und melden Sie Fehler klar an den Benutzer.

Schnelltest

Testen Sie Ihr Verständnis von TCP-Clients.

Zusammenfassung

Sie haben einen TCP-Client erstellt.

  • socket, dann connect zur sockaddr_in des Servers
  • Kein bind erforderlich; der Kernel wählt einen Quellport
  • Die Anfrage mit send senden, die Antwort mit recv empfangen (für vollständige Daten in einer Schleife)
  • Nach Abschluss close oder shutdown aufrufen; Fehler bei connect behandeln

Häufig gestellte Fragen

Ist die Lektion „TCP-Client“ kostenlos?

Ja — der vollständige Text von „TCP-Client“ 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 „TCP-Client“?

Verbinden und senden 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 3 von 4.

Wie lange dauert die Lektion „TCP-Client“?

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. Überblick über Sockets
  2. TCP-Server
  3. TCP-Client
  4. Mehrere Clients verarbeiten
← Zurück zu C Academy