BSD Sockets-API i C++
Brug socket, bind, listen, accept, connect, send og recv i C++-programmer
BSD Sockets-API i C++ er en gratis C++ Academy-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser 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 Sockets API'et?
BSD sockets-API'et er de facto-standarden til netværksprogrammering. Det findes på Linux, macOS og BSD-systemer samt på Windows via Winsock med mindre tilpasninger.
Påkrævede headerfiler
Inkludér platformens headerfiler, og brug POSIX-typer.
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>Oprettelse af en socket
Kaldet socket returnerer en fildeskriptor. Angiv familie (IPv4), type (TCP eller UDP) og protokol (0 for standardindstillingen).
int sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock < 0) {
perror("socket");
return 1;
}Adressestrukturer
struct sockaddr_in indeholder en IPv4-adresse og en port. Cast til struct sockaddr*, når du sender den til funktioner.
struct sockaddr_in addr{};
addr.sin_family = AF_INET;
addr.sin_port = htons(8080);
inet_pton(AF_INET, "127.0.0.1", &addr.sin_addr);Byteorden: vært kontra netværk
Netværksbyteorden er big-endian. Brug htons, htonl, ntohs og ntohl til at konvertere.
Tilslutning af en klient
Brug connect til at starte en TCP-forbindelse.
if (connect(sock, (sockaddr*)&addr, sizeof(addr)) < 0) {
perror("connect");
close(sock);
return 1;
}Afsendelse og modtagelse
send og recv udveksler bytes. Begge kan returnere færre bytes end anmodet om — gentag altid i en løkke.
const char* msg = "Hello";
send(sock, msg, strlen(msg), 0);
char buffer[1024];
ssize_t n = recv(sock, buffer, sizeof(buffer)-1, 0);
buffer[n] = '\0';Binding og lytning (server)
En server binder sig til en adresse, lytter og accepterer forbindelser.
int srv = socket(AF_INET, SOCK_STREAM, 0);
bind(srv, (sockaddr*)&addr, sizeof(addr));
listen(srv, 10);
int client = accept(srv, nullptr, nullptr);Lukning af socketen
Kald close på Unix eller closesocket på Windows.
close(sock);Fejlhåndtering
Sockets-funktioner returnerer -1 ved fejl og sætter errno. Kontrollér hver returværdi.
Indpakning med RAII
Uindpakkede fildeskriptorer er nemme at lække. Pak dem ind i en RAII-type med et close-kald i destruktøren — eller brug std::unique_ptr med en brugerdefineret deleter.
struct SocketCloser {
void operator()(int* fd) const { if (*fd >= 0) ::close(*fd); }
};
using UniqueSocket = std::unique_ptr<int, SocketCloser>;Forskelle på Windows
På Windows:
- Inkludér
<winsock2.h>, og linkws2_32 - Kald
WSAStartupfør brug - Brug
closesocketi stedet forclose - Socket-typen er
SOCKET(uden fortegn)
Hurtigt tjek
Hvilket funktionskald starter en TCP-forbindelse fra en klient til en server?
Opsummering
BSD sockets-API'et tilbyder lavniveauprimitiver til netværk. Opret en socket, konfigurér en adresse, og forbind derefter med connect som klient, eller brug bind+listen+accept som server. Konvertér byteorden med htons-familien. Pak deskriptorer ind i RAII for at forhindre lækager.
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
- 51
- Lektioner
- 203
Ofte stillede spørgsmål
Er lektionen “BSD Sockets-API i C++” gratis?
Ja — alle 3 lektioner i læringssporet C++ Academy, inklusive “BSD Sockets-API i C++”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. C++ Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “BSD Sockets-API i C++”?
Brug socket, bind, listen, accept, connect, send og recv i C++-programmer 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 “BSD Sockets-API i C++”?
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
- BSD Sockets-API i C++
- Bygning af en TCP-echo-server
- Asynkron I/O med epoll og kqueue
- Brug af Boost Asio til moderne asynkron I/O