Server TCP
Terima koneksi.
Server 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.
Membangun Peladen TCP
Peladen TCP menunggu klien dan menerima koneksi mereka. Siklus hidupnya adalah: membuat soket, mengikatnya ke porta, menunggu koneksi, lalu menerima koneksi dalam sebuah pengulangan.
Langkah 1: Membuat Soket
Buat soket aliran untuk TCP IPv4. Hasil negatif berarti terjadi kegagalan.
#include <sys/socket.h>
#include <stdio.h>
int make_server_socket(void) {
int fd = socket(AF_INET, SOCK_STREAM, 0);
if (fd < 0) { perror("socket"); }
return fd;
}Langkah 2: Mengizinkan Penggunaan Ulang Alamat
Secara bawaan, sebuah porta tetap berada dalam TIME_WAIT setelah peladen berhenti, sehingga pengaktifan ulang terhalang. Tetapkan SO_REUSEADDR dengan setsockopt agar Anda dapat segera mengikat ulang porta tersebut.
#include <sys/socket.h>
void allow_reuse(int fd) {
int yes = 1;
setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof yes);
}Langkah 3: Mengikat ke Porta
bind() mengaitkan soket dengan alamat dan porta lokal. INADDR_ANY membuat soket mendengarkan pada semua antarmuka jaringan.
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>
int bind_port(int fd, unsigned short port) {
struct sockaddr_in addr = {0};
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = INADDR_ANY;
addr.sin_port = htons(port);
if (bind(fd, (struct sockaddr *)&addr, sizeof addr) < 0) {
perror("bind"); return -1;
}
return 0;
}Langkah 4: Menunggu Koneksi
listen() menandai soket sebagai pasif (siap menerima koneksi). Argumen backlog menentukan jumlah koneksi tertunda yang dapat diantrekan oleh kernel.
#include <sys/socket.h>
#include <stdio.h>
int start_listen(int fd) {
if (listen(fd, 16) < 0) { /* backlog of 16 */
perror("listen"); return -1;
}
return 0;
}Langkah 5: Menerima Koneksi
accept() menunggu hingga klien terhubung, lalu mengembalikan soket baru untuk klien tersebut. Soket asli tetap mendengarkan.
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>
int accept_one(int listen_fd) {
struct sockaddr_in cli;
socklen_t len = sizeof cli;
int conn = accept(listen_fd, (struct sockaddr *)&cli, &len);
if (conn < 0) perror("accept");
return conn;
}Dua Soket, Dua Peran
Setelah accept, Anda memiliki dua soket:
- Soket yang mendengarkan terus menerima klien baru
- Soket koneksi berkomunikasi dengan satu klien tertentu
Tutup soket koneksi setelah selesai melayani klien tersebut.
Membaca Permintaan
Gunakan recv untuk membaca data klien ke dalam buffer. Nilai kembalian 0 berarti klien terputus; -1 berarti terjadi kesalahan.
#include <sys/socket.h>
#include <stdio.h>
void handle(int conn) {
char buf[256];
ssize_t n = recv(conn, buf, sizeof buf - 1, 0);
if (n > 0) { buf[n] = 0; printf("got: %s\n", buf); }
}Mengirim Respons
Kirim balasan dengan send. Untuk data berukuran besar, lakukan pengulangan hingga semua bita terkirim, karena satu pemanggilan mungkin hanya menulis sebagian buffer.
#include <sys/socket.h>
#include <string.h>
void reply(int conn) {
const char *msg = "hello from server\n";
size_t left = strlen(msg);
const char *p = msg;
while (left > 0) {
ssize_t n = send(conn, p, left, 0);
if (n <= 0) break;
p += n; left -= (size_t)n;
}
}Pengulangan Accept
Peladen iteratif sederhana menerima satu klien, melayaninya, menutup koneksinya, lalu kembali mengulang untuk menerima klien berikutnya. Peladen ini menangani klien satu per satu.
#include <unistd.h>
void serve_loop(int listen_fd, int (*accept_one)(int), void (*handle)(int)) {
for (;;) {
int conn = accept_one(listen_fd);
if (conn < 0) continue;
handle(conn);
close(conn); /* done with this client */
}
}Pematian yang Terkendali
Tutup soket yang mendengarkan ketika peladen berhenti, dan tangani SIGINT untuk keluar dari pengulangan dengan rapi. Selalu tutup deskriptor untuk melepaskan sumber daya kernel.
Uji Singkat
Uji pemahaman Anda tentang peladen TCP.
Rangkuman
Anda telah membangun peladen TCP langkah demi langkah.
- socket, kemudian SO_REUSEADDR, lalu bind, listen, dan accept
acceptmengembalikan soket baru untuk setiap klien- Gunakan recv/send untuk berkomunikasi, lalu tutup koneksi
- Lakukan pengulangan untuk melayani klien; periksa setiap nilai kembalian
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Server TCP” gratis?
Ya — teks lengkap “Server 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 “Server TCP”?
Terima koneksi. 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 “Server 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.