C Academy · Lektion

Översikt över sockets

Grunderna i nätverkskommunikation.

Lektion 1 av 413 steg

Översikt över sockets är en gratis lektion i C Academy på CoddyKit. Detta är lektion 1 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för C Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i C Academy innehåller totalt 4 lektioner.

Vad är en socket

En socket är en slutpunkt för nätverkskommunikation. På POSIX-system är den en fildeskriptor som du kan läsa från och skriva till, vilket gör att två program kan utbyta data över ett nätverk eller på samma dator.

Klient-server-modellen

De flesta nätverksprogram använder klient-server-modellen:

  • Servern binder till en adress och väntar på anslutningar
  • Klienten initierar en anslutning till servern

När anslutningen har upprättats kan båda sidor skicka och ta emot data.

TCP jämfört med UDP

Två huvudsakliga transportprotokoll:

  • TCP (SOCK_STREAM): tillförlitligt, ordnat och anslutningsbaserat
  • UDP (SOCK_DGRAM): snabbt, anslutningslöst och kan tappa eller ändra ordningen på paket

Använd TCP när korrekthet är viktigast och UDP för strömning med låg fördröjning.

Skapa en socket

Anropet socket() returnerar en fildeskriptor. Argumenten är adressfamilj (AF_INET för IPv4), typ (SOCK_STREAM för TCP) och protokoll (0 för standardvärdet).

/* 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 för socketadresser

En IPv4-adress beskrivs av struct sockaddr_in, som innehåller familj, port och IP-adress. Funktionerna tar en generell struct sockaddr *, så du måste typomvandla den.

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

Byteordningen spelar roll

Nätverk använder big-endian (nätverkets byteordning). Konvertera med:

  • htons / htonl värddator till nätverk (short/long)
  • ntohs / ntohl nätverk till värddator

Konvertera alltid portar och adresser, annars kommunicerar du med fel plats.

Konvertera IP-adresser

inet_pton konverterar en textbaserad IP-adress som "127.0.0.1" till den binära form som lagras i sin_addr, och inet_ntop gör omvändningen för utskrift.

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

Serverns anropssekvens

En TCP-server anropar vanligtvis följande i ordning:

  • socket() skapa
  • bind() koppla till en adress och port
  • listen() markera som passiv
  • accept() ta emot en anslutning

Klientens anropssekvens

En TCP-klient är enklare:

  • socket() skapa
  • connect() ansluta till serverns adress

Därefter kan den använda send och recv på samma deskriptor.

Skicka och ta emot

Använd send() och recv() (eller de generella write() och read()). Båda kan överföra färre byte än begärt, så riktig kod upprepar anropet tills all data har hanterats.

Kontrollera alltid returvärden

Alla socketanrop kan misslyckas. Returvärdet -1 anger felet i errno; anropa perror för att rapportera det. Ett recv-anrop som returnerar 0 betyder att motparten har stängt anslutningen. Robust nätverksprogrammering bygger på felkontroll.

Snabbtest

Testa din förståelse av grunderna i socketprogrammering.

Sammanfattning

Du har lärt dig grunderna i socketprogrammering.

  • En socket är en nätverksslutpunkt och en fildeskriptor
  • Klient-server-modell med TCP (tillförlitligt) eller UDP (snabbt)
  • Använd sockaddr_in tillsammans med htons och inet_pton
  • Server: socket, bind, listen, accept. Klient: socket, connect
Gratis att börja

Lär dig C med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
39
Lektioner
144

Vanliga frågor

Är lektionen ”Översikt över sockets” gratis?

Ja – hela texten till ”Översikt över sockets” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i C Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i C Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Översikt över sockets”?

Grunderna i nätverkskommunikation. Ni övar på C Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig C Academy?

Du behöver inga förkunskaper. Utbildningen i C Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.

Hur lång tid tar lektionen ”Översikt över sockets”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här C Academy-lektionen?

Ja. Varje C Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Översikt över sockets
  2. TCP-server
  3. TCP-klient
  4. Hantera flera klienter
← Tillbaka till C Academy