Membangun Server Echo TCP
Pelajari implementasi lengkap server echo TCP
Membangun Server Echo TCP adalah pelajaran C++ Academy gratis di CoddyKit. Ini adalah pelajaran 2 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.
Tujuan
Buat server TCP minimal yang menerima koneksi, membaca byte, lalu menuliskannya kembali. Inilah "Hello World" dalam pemrograman jaringan.
Kerangka Server
Alur server: buat soket, ikat, dengarkan, terima, lalu handle. Ulangi selamanya.
int srv = socket(AF_INET, SOCK_STREAM, 0);
bind(srv, (sockaddr*)&addr, sizeof(addr));
listen(srv, 10);
while (true) {
int client = accept(srv, nullptr, nullptr);
handle(client);
close(client);
}Opsi Penggunaan Kembali Alamat
Atur SO_REUSEADDR agar server dapat segera dimulai ulang tanpa menunggu OS melepaskan port.
int yes = 1;
setsockopt(srv, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(yes));Perulangan Echo
Baca ke dalam buffer, lalu tuliskan kembali byte yang sama. Berhenti ketika klien menutup koneksi.
void handle(int client) {
char buf[1024];
while (true) {
ssize_t n = recv(client, buf, sizeof(buf), 0);
if (n <= 0) break; // closed or error
send(client, buf, n, 0);
}
}Pembacaan dan Penulisan Parsial
recv dan send dapat mentransfer jumlah byte yang lebih sedikit daripada yang diminta. Untuk protokol berbasis aliran, lakukan perulangan sampai selesai.
ssize_t total = 0;
while (total < n) {
ssize_t s = send(client, buf + total, n - total, 0);
if (s <= 0) break;
total += s;
}Menangani Banyak Klien
Pendekatan paling sederhana adalah membuat satu utas baru untuk setiap koneksi. Pendekatan ini berfungsi untuk ratusan klien, tetapi mulai kesulitan saat jumlahnya mencapai ribuan.
while (true) {
int client = accept(srv, nullptr, nullptr);
std::thread([client]{ handle(client); close(client); }).detach();
}Yang Lebih Baik: Kumpulan Utas
Membuat satu utas untuk setiap koneksi memboroskan sumber daya dalam skala besar. Kumpulan utas berjumlah tetap dengan antrean pekerjaan dapat diskalakan dengan lebih baik.
Penghentian yang Mulus
Tangani SIGTERM/SIGINT untuk menutup soket pendengar dengan bersih. RAII juga membantu memastikan semua soket klien ikut tertutup.
Penanganan Kesalahan
Perlakukan kesalahan sebagai hal yang wajar: klien dapat terputus, jaringan dapat mengalami gangguan, dan batasan OS dapat tercapai. Catat kesalahan lalu lanjutkan — jangan mengalami kerusakan hanya karena klien yang bermasalah.
Mencatat Setiap Klien
Catat alamat jarak jauh untuk memudahkan pemantauan.
sockaddr_in remote{};
socklen_t len = sizeof(remote);
int client = accept(srv, (sockaddr*)&remote, &len);
char ip[INET_ADDRSTRLEN];
inet_ntop(AF_INET, &remote.sin_addr, ip, sizeof(ip));
std::cout << "client " << ip << ":" << ntohs(remote.sin_port);Menguji dengan netcat
Uji server echo Anda secara interaktif dengan nc.
nc 127.0.0.1 8080
hello
hello # echoed backDi Luar Echo
Dari echo, Anda dapat mengembangkannya menjadi:
- Protokol berbasis baris (mirip HTTP)
- Protokol biner berbingkai (dengan awalan panjang)
- Pesan JSON atau Protobuf
Pemeriksaan Singkat
Apa tujuan opsi soket SO_REUSEADDR?
Ringkasan
Server echo TCP minimal terdiri dari socket, setsockopt SO_REUSEADDR, bind, listen, dan accept dalam perulangan. Untuk menangani banyak klien, buat utas atau gunakan kumpulan utas. Untuk skala tinggi, beralihlah ke I/O asinkron (pelajaran berikutnya).
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Membangun Server Echo TCP” gratis?
Ya — teks lengkap “Membangun Server Echo TCP” 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 “Membangun Server Echo TCP”?
Pelajari implementasi lengkap server echo TCP 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 2 dari 4.
Berapa lama pelajaran “Membangun Server Echo TCP” 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