0Pricing
C Academy · Lektion

Überblick über Sockets

Grundlagen der Netzwerkkommunikation

Überblick über Sockets 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 ein Socket

Ein Socket ist ein Endpunkt für die Netzwerkkommunikation. Auf POSIX-Systemen handelt es sich um einen Dateideskriptor, aus dem Sie lesen und in den Sie schreiben können. Dadurch können zwei Programme Daten über ein Netzwerk oder auf demselben Rechner austauschen.

Das Client-Server-Modell

Die meisten Netzwerkanwendungen verwenden das Client-Server-Modell:

  • Der Server bindet sich an eine Adresse und wartet auf Verbindungen
  • Der Client stellt die Verbindung zum Server her

Nach dem Verbindungsaufbau können beide Seiten Daten senden und empfangen.

TCP im Vergleich zu UDP

Die beiden wichtigsten Transportprotokolle:

  • TCP (SOCK_STREAM): zuverlässig, geordnet und verbindungsorientiert
  • UDP (SOCK_DGRAM): schnell, verbindungslos; Pakete können verloren gehen oder in falscher Reihenfolge eintreffen

Verwenden Sie TCP für Korrektheit und UDP für Streaming mit geringer Latenz.

Einen Socket erstellen

Der Aufruf socket() gibt einen Dateideskriptor zurück. Argumente sind die Adressfamilie (AF_INET für IPv4), der Typ (SOCK_STREAM für TCP) und das Protokoll (0 für die Standardeinstellung).

/* Conceptual: sockets need a network environment to run */
#include <sys/socket.h>
#include <netinet/in.h>

int create_tcp_socket(void) {
    int fd = socket(AF_INET, SOCK_STREAM, 0);
    /* fd < 0 means error; check with perror */
    return fd;
}

Socket-Adressstrukturen

Eine IPv4-Adresse wird durch struct sockaddr_in beschrieben. Diese Struktur enthält die Familie, den Port und die IP-Adresse. Funktionen erwarten einen generischen struct sockaddr *, daher müssen Sie eine Typumwandlung vornehmen.

#include <netinet/in.h>

void fill_addr(struct sockaddr_in *addr, unsigned short port) {
    addr->sin_family = AF_INET;
    addr->sin_port = htons(port);      /* host to network short */
    addr->sin_addr.s_addr = INADDR_ANY; /* all interfaces */
}

Die Byte-Reihenfolge ist wichtig

Netzwerke verwenden Big-Endian (Netzwerk-Byte-Reihenfolge). Konvertieren Sie mit:

  • htons / htonl Host zu Netzwerk (short/long)
  • ntohs / ntohl Netzwerk zu Host

Konvertieren Sie Ports und Adressen immer, sonst kommunizieren Sie mit dem falschen Ziel.

IP-Adressen konvertieren

inet_pton konvertiert eine Text-IP-Adresse wie "127.0.0.1" in die Binärform, die in sin_addr gespeichert wird. inet_ntop führt die umgekehrte Konvertierung für die Ausgabe durch.

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

int set_ip(struct sockaddr_in *addr, const char *ip) {
    return inet_pton(AF_INET, ip, &addr->sin_addr); /* returns 1 on success */
}

Die Aufrufreihenfolge auf dem Server

Ein TCP-Server ruft typischerweise Folgendes in dieser Reihenfolge auf:

  • socket() erstellen
  • bind() an eine Adresse und einen Port binden
  • listen() als passiv markieren
  • accept() eine Verbindung annehmen

Die Aufrufreihenfolge auf dem Client

Ein TCP-Client ist einfacher:

  • socket() erstellen
  • connect() die Adresse des Servers kontaktieren

Anschließend kann er über denselben Deskriptor send und recv verwenden.

Senden und Empfangen

Verwenden Sie send() und recv() oder die generischen Funktionen write() und read(). Beide können weniger Bytes übertragen als angefordert. In echtem Code müssen Sie daher eine Schleife verwenden, bis alle Daten verarbeitet wurden.

Rückgabewerte immer prüfen

Jeder Socket-Aufruf kann fehlschlagen. Bei einem Rückgabewert von -1 wird errno gesetzt; rufen Sie perror auf, um den Fehler auszugeben. Ein recv-Ergebnis von 0 bedeutet, dass der Kommunikationspartner die Verbindung geschlossen hat. Robuste Netzwerkprogrammierung steht und fällt mit der Fehlerprüfung.

Kurzer Test

Testen Sie Ihr Verständnis der Socket-Grundlagen.

Zusammenfassung

Sie haben die Grundlagen der Socket-Programmierung kennengelernt.

  • Ein Socket ist ein Netzwerkendpunkt und ein Dateideskriptor
  • Client-Server-Modell mit TCP (zuverlässig) oder UDP (schnell)
  • Verwenden Sie sockaddr_in mit htons und inet_pton
  • Server: socket, bind, listen, accept. Client: socket, connect

Häufig gestellte Fragen

Ist die Lektion „Überblick über Sockets“ kostenlos?

Ja — der vollständige Text von „Überblick über Sockets“ 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 „Überblick über Sockets“?

Grundlagen der Netzwerkkommunikation 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 „Überblick über Sockets“?

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