0Pricing
C Academy · Pelajaran

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
  • accept mengembalikan 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.

Semua pelajaran dalam kursus ini

  1. Gambaran Umum Socket
  2. Server TCP
  3. Klien TCP
  4. Menangani Banyak Klien
← Kembali ke C Academy