C Academy · Lektion

Oversigt over sockets

Grundlæggende netværkskommunikation

Lektion 1 af 413 trin

Oversigt over sockets er en gratis C Academy-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i C Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. C Academy-kurset indeholder 4 lektioner i alt.

Hvad er en socket

En socket er et slutpunkt for netværkskommunikation. På POSIX-systemer er den en fildeskriptor, som du kan læse fra og skrive til, så to programmer kan udveksle data over et netværk eller på den samme maskine.

Klient-server-modellen

De fleste netværksapps bruger klient-server-modellen:

  • Serveren binder sig til en adresse og venter på forbindelser
  • Klienten tager initiativ til en forbindelse til serveren

Når forbindelsen er oprettet, sender og modtager begge sider data.

TCP kontra UDP

De to vigtigste transportprotokoller er:

  • TCP (SOCK_STREAM): pålidelig, ordnet og forbindelsesbaseret
  • UDP (SOCK_DGRAM): hurtig og forbindelsesløs; pakker kan gå tabt eller komme i forkert rækkefølge

Brug TCP for korrekthed og UDP til streaming med lav latenstid.

Oprettelse af en socket

Kaldet socket() returnerer en fildeskriptor. Argumenterne er adressefamilien (AF_INET for IPv4), typen (SOCK_STREAM for TCP) og protokollen (0 for standardværdien).

/* 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;
}

Strukturer til socket-adresser

En IPv4-adresse beskrives af struct sockaddr_in, som indeholder familien, porten og IP-adressen. Funktioner modtager en generisk struct sockaddr *, så du skal konvertere typen.

#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 */
}

Byteorden er vigtig

Netværk bruger big-endian (netværksbyteorden). Konvertér med:

  • htons / htonl vært til netværk (short/long)
  • ntohs / ntohl netværk til vært

Konvertér altid porte og adresser, ellers kommunikerer du med det forkerte sted.

Konvertering af IP-adresser

inet_pton konverterer en tekstbaseret IP-adresse som "127.0.0.1" til den binære form, der gemmes i sin_addr, og inet_ntop gør det omvendte, så adressen kan vises.

#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 */
}

Serverens kaldsekvens

En TCP-server kalder typisk følgende i rækkefølge:

  • socket() opretter en socket
  • bind() knytter den til en adresse og port
  • listen() markerer den som passiv
  • accept() henter en forbindelse

Klientens kaldsekvens

En TCP-klient er enklere:

  • socket() opretter en socket
  • connect() opretter forbindelse til serverens adresse

Derefter kan den bruge send og recv på den samme deskriptor.

Afsendelse og modtagelse

Brug send() og recv() (eller de generiske write() og read()). Begge kan overføre færre bytes end anmodet, så rigtig kode gentager kaldet, indtil alle data er behandlet.

Kontrollér altid returværdier

Ethvert socket-kald kan mislykkes. En returværdi på -1 indstiller errno; kald perror for at rapportere fejlen. En recv på 0 betyder, at modparten lukkede forbindelsen. Robust netværkskode afhænger helt af fejlkontrol.

Hurtigt tjek

Test din forståelse af det grundlæggende i sockets.

Opsummering

Du har lært grundlaget for socket-programmering.

  • En socket er et netværksslutpunkt og en fildeskriptor
  • Klient-server-model med TCP (pålidelig) eller UDP (hurtig)
  • Brug sockaddr_in sammen med htons og inet_pton
  • Server: socket, bind, listen, accept. Klient: socket, connect
Gratis at komme i gang

Lær C med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
39
Lektioner
144

Ofte stillede spørgsmål

Er lektionen “Oversigt over sockets” gratis?

Ja — hele teksten til “Oversigt over sockets” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af C Academy-kurset, skal du opgradere til CoddyKit PRO. C Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Oversigt over sockets”?

Grundlæggende netværkskommunikation Du øver dig i C Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på C Academy?

Der kræves ingen tidligere erfaring. C Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.

Hvor lang tid tager lektionen “Oversigt over sockets”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne C Academy-lektion?

Ja. Alle C Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Oversigt over sockets
  2. TCP-server
  3. TCP-klient
  4. Håndtering af flere klienter
← Tilbage til C Academy