Oversigt over sockets
Grundlæggende netværkskommunikation
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/htonlvært til netværk (short/long)ntohs/ntohlnetvæ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 socketbind()knytter den til en adresse og portlisten()markerer den som passivaccept()henter en forbindelse
Klientens kaldsekvens
En TCP-klient er enklere:
socket()opretter en socketconnect()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_insammen medhtonsoginet_pton - Server: socket, bind, listen, accept. Klient: socket, connect
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
- Oversigt over sockets
- TCP-server
- TCP-klient
- Håndtering af flere klienter