Översikt över sockets
Grunderna i nätverkskommunikation.
Ö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/htonlvärddator till nätverk (short/long)ntohs/ntohlnä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()skapabind()koppla till en adress och portlisten()markera som passivaccept()ta emot en anslutning
Klientens anropssekvens
En TCP-klient är enklare:
socket()skapaconnect()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_intillsammans medhtonsochinet_pton - Server: socket, bind, listen, accept. Klient: socket, connect
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
- Översikt över sockets
- TCP-server
- TCP-klient
- Hantera flera klienter