0Pricing
C Academy · Pelajaran

Klien TCP

Hubungkan dan kirim.

Klien TCP adalah pelajaran C Academy gratis di CoddyKit. Ini adalah pelajaran 3 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 Klien TCP

Klien TCP terhubung ke peladen, lalu mengirim dan menerima data. Siklus hidupnya lebih singkat daripada siklus hidup peladen: membuat soket, terhubung, berkomunikasi, lalu menutupnya.

Langkah 1: Membuat Soket

Sama seperti pada peladen, buat soket aliran untuk TCP IPv4.

#include <sys/socket.h>
#include <stdio.h>

int make_client_socket(void) {
    int fd = socket(AF_INET, SOCK_STREAM, 0);
    if (fd < 0) perror("socket");
    return fd;
}

Langkah 2: Menjelaskan Peladen

Isi sockaddr_in dengan porta dan IP peladen. Gunakan inet_pton untuk mengonversi string IP bertitik ke bentuk biner.

#include <arpa/inet.h>
#include <netinet/in.h>

int set_server(struct sockaddr_in *addr, const char *ip, unsigned short port) {
    addr->sin_family = AF_INET;
    addr->sin_port = htons(port);
    return inet_pton(AF_INET, ip, &addr->sin_addr); /* 1 on success */
}

Langkah 3: Terhubung

connect() melakukan jabat tangan TCP dengan peladen. Jika berhasil, soket siap digunakan untuk data; jika gagal, fungsi ini menetapkan errno (misalnya koneksi ditolak).

#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>

int do_connect(int fd, struct sockaddr_in *addr) {
    if (connect(fd, (struct sockaddr *)addr, sizeof *addr) < 0) {
        perror("connect"); return -1;
    }
    return 0;
}

Tidak Perlu Bind

Klien biasanya melewati bind: kernel secara otomatis menetapkan porta sumber sementara selama connect. Anda hanya perlu mengikat klien jika memerlukan porta sumber tertentu.

Langkah 4: Mengirim Data

Setelah terhubung, tulis permintaan dengan send. Lakukan pengulangan untuk memastikan seluruh buffer terkirim.

#include <sys/socket.h>
#include <string.h>

int send_all(int fd, const char *data) {
    size_t left = strlen(data);
    const char *p = data;
    while (left > 0) {
        ssize_t n = send(fd, p, left, 0);
        if (n <= 0) return -1;
        p += n; left -= (size_t)n;
    }
    return 0;
}

Langkah 5: Menerima Balasan

Baca respons peladen dengan recv. Tambahkan terminator null sebelum memperlakukan buffer sebagai string.

#include <sys/socket.h>
#include <stdio.h>

void read_reply(int fd) {
    char buf[512];
    ssize_t n = recv(fd, buf, sizeof buf - 1, 0);
    if (n > 0) { buf[n] = 0; printf("server said: %s\n", buf); }
    else if (n == 0) printf("server closed connection\n");
}

Membaca hingga Ditutup

Satu pemanggilan recv mungkin tidak mengembalikan seluruh respons. Ulangi hingga recv mengembalikan 0 (pihak lawan menutup koneksi) untuk membaca seluruh balasan yang tiba dalam beberapa bagian.

#include <sys/socket.h>
#include <stdio.h>

void drain(int fd) {
    char buf[256]; ssize_t n;
    while ((n = recv(fd, buf, sizeof buf, 0)) > 0)
        fwrite(buf, 1, (size_t)n, stdout);
}

Langkah 6: Menutup

Panggil close(fd) untuk mengakhiri koneksi dan membebaskan deskriptor. Tindakan ini mengirim FIN TCP agar peladen mengetahui bahwa klien telah selesai.

#include <unistd.h>

void finish(int fd) {
    close(fd);
}

Menutup Separuh dengan shutdown

shutdown(fd, SHUT_WR) hanya menutup arah penulisan, menandakan akhir permintaan, tetapi tetap memungkinkan klien membaca balasan. Ini berguna untuk protokol permintaan-lalu-respons.

Menangani Kegagalan Koneksi

Kesalahan klien yang umum: ECONNREFUSED (tidak ada server yang sedang mendengarkan), ETIMEDOUT (host tidak dapat dijangkau), dan EHOSTUNREACH. Selalu periksa connect dan laporkan kegagalan dengan jelas kepada pengguna.

Pemeriksaan Singkat

Uji pemahaman Anda tentang klien TCP.

Ringkasan

Anda telah membuat klien TCP.

  • buat socket, lalu lakukan connect ke sockaddr_in milik server
  • Tidak perlu bind; kernel memilih port sumber
  • kirim permintaan, terima balasan dengan recv (lakukan perulangan untuk mendapatkan semua data)
  • lakukan close atau shutdown setelah selesai; tangani kegagalan connect

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Klien TCP” gratis?

Ya — teks lengkap “Klien 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 “Klien TCP”?

Hubungkan dan kirim. 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 3 dari 4.

Berapa lama pelajaran “Klien 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