C++ Academy · Lektion

BSD Sockets-API i C++

Brug socket, bind, listen, accept, connect, send og recv i C++-programmer

Lektion 1 af 414 trin

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 link ws2_32
  • Kald WSAStartup før brug
  • Brug closesocket i stedet for close
  • 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.

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
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

  1. BSD Sockets-API i C++
  2. Bygning af en TCP-echo-server
  3. Asynkron I/O med epoll og kqueue
  4. Brug af Boost Asio til moderne asynkron I/O
← Tilbage til C++ Academy