API Soket BSD dalam C++
Gunakan socket, bind, listen, accept, connect, send, dan recv dalam program C++
API Soket BSD dalam C++ adalah pelajaran C++ Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C++ Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C++ Academy mencakup 4 pelajaran total.
Apa Itu API Soket?
API soket BSD merupakan standar de facto untuk pemrograman jaringan. API ini tersedia di Linux, macOS, BSD, dan (dengan sedikit penyesuaian) Windows melalui Winsock.
Berkas Header yang Diperlukan
Sertakan header platform dan gunakan tipe POSIX.
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>Membuat Soket
Pemanggilan socket mengembalikan deskriptor berkas. Berikan keluarga (IPv4), tipe (TCP atau UDP), dan protokol (0 untuk bawaan).
int sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock < 0) {
perror("socket");
return 1;
}Struktur Alamat
struct sockaddr_in menyimpan alamat IPv4 dan port. Lakukan cast ke struct sockaddr* saat meneruskannya ke fungsi.
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);Urutan Byte: Host vs Jaringan
Urutan byte jaringan menggunakan big-endian. Gunakan htons, htonl, ntohs, ntohl untuk melakukan konversi.
Menghubungkan Klien
Gunakan connect untuk memulai koneksi TCP.
if (connect(sock, (sockaddr*)&addr, sizeof(addr)) < 0) {
perror("connect");
close(sock);
return 1;
}Mengirim dan Menerima
send dan recv saling bertukar byte. Keduanya dapat mengembalikan jumlah yang lebih sedikit daripada yang diminta — selalu lakukan perulangan.
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';Mengikat dan Mendengarkan (Server)
Server mengikat dirinya ke alamat, mendengarkan, lalu menerima koneksi.
int srv = socket(AF_INET, SOCK_STREAM, 0);
bind(srv, (sockaddr*)&addr, sizeof(addr));
listen(srv, 10);
int client = accept(srv, nullptr, nullptr);Menutup Soket
Panggil close di Unix atau closesocket di Windows.
close(sock);Penanganan Kesalahan
Fungsi soket mengembalikan -1 saat terjadi kesalahan dan menetapkan errno. Periksa setiap nilai yang dikembalikan.
Membungkus dengan RAII
Deskriptor berkas mentah mudah bocor. Bungkus deskriptor tersebut dalam tipe RAII dengan close di destruktor — atau gunakan std::unique_ptr dengan penghapus khusus.
struct SocketCloser {
void operator()(int* fd) const { if (*fd >= 0) ::close(*fd); }
};
using UniqueSocket = std::unique_ptr<int, SocketCloser>;Perbedaan di Windows
Di Windows:
- Sertakan
<winsock2.h>dan tautkanws2_32 - Panggil
WSAStartupsebelum digunakan - Gunakan
closesocket, bukanclose - Tipe soket adalah
SOCKET(tak bertanda)
Pemeriksaan Singkat
Pemanggilan fungsi mana yang memulai koneksi TCP dari klien ke server?
Ringkasan
API soket BSD menyediakan primitif jaringan tingkat rendah. Buat soket, konfigurasikan alamat, lalu lakukan connect (klien) atau bind+listen+accept (server). Konversikan urutan byte dengan keluarga fungsi htons. Bungkus deskriptor dalam RAII untuk mencegah kebocoran.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “API Soket BSD dalam C++” gratis?
Ya — teks lengkap “API Soket BSD dalam C++” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C++ Academy, upgrade ke CoddyKit PRO. Kursus C++ Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “API Soket BSD dalam C++”?
Gunakan socket, bind, listen, accept, connect, send, dan recv dalam program C++ Kamu berlatih C++ Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai C++ Academy?
Tidak diperlukan pengalaman sebelumnya. C++ Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “API Soket BSD dalam C++” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran C++ Academy ini?
Ya. Setiap pelajaran C++ Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- API Soket BSD dalam C++
- Membangun Server Echo TCP
- IO Asinkron dengan epoll dan kqueue
- Menggunakan Boost Asio untuk IO Asinkron Modern