0Pricing
C Academy · Ders

TCP İstemcisi

Bağlanın ve gönderin

TCP İstemcisi, CoddyKit'te ücretsiz bir C Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C Academy kursu toplamda 4 dersten oluşur.

TCP İstemcisi Oluşturma

Bir TCP istemcisi sunucuya bağlanır, ardından veri gönderip alır. Yaşam döngüsü sunucununkinden daha kısadır: soket oluşturma, bağlanma, iletişim kurma ve kapatma.

1. Adım: Soketi Oluşturma

Sunucuda olduğu gibi IPv4 TCP için bir akış soketi oluşturun.

#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;
}

2. Adım: Sunucuyu Tanımlama

Bir sockaddr_in yapısını sunucunun bağlantı noktası ve IP adresiyle doldurun. Noktalı IP dizesini ikili biçime dönüştürmek için inet_pton kullanın.

#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 */
}

3. Adım: Bağlanma

connect(), sunucuyla TCP el sıkışmasını gerçekleştirir. Başarılı olursa soket veri alışverişine hazırdır; başarısız olursa errno ayarlanır (örneğin bağlantı reddedildiğinde).

#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;
}

Bind Gerekmez

İstemciler genellikle bind kullanmaz: çekirdek, connect sırasında geçici bir kaynak bağlantı noktasını otomatik olarak atar. İstemciyi yalnızca belirli bir kaynak bağlantı noktasına ihtiyaç duyduğunuzda bind edersiniz.

4. Adım: Veri Gönderme

Bağlandıktan sonra send ile bir istek yazın. Tüm arabelleğin gönderildiğinden emin olmak için döngü kullanın.

#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;
}

5. Adım: Yanıtı Alma

Sunucunun yanıtını recv ile okuyun. Arabelleği dize olarak değerlendirmeden önce sonuna boş karakter ekleyin.

#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");
}

Bağlantı Kapanana Kadar Okuma

Tek bir recv çağrısı yanıtın tamamını döndürmeyebilir. Parçalar hâlinde gelen yanıtın tamamını okumak için recv 0 döndürene (karşı taraf bağlantıyı kapatana) kadar döngü kullanın.

#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);
}

6. Adım: Kapatma

Bağlantıyı sonlandırmak ve tanımlayıcıyı serbest bırakmak için close(fd) çağrısı yapın. Bu işlem bir TCP FIN göndererek sunucuya istemcinin işini tamamladığını bildirir.

#include <unistd.h>

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

shutdown ile Yarı Kapatma

shutdown(fd, SHUT_WR) yalnızca yazma yönünü kapatır ve istemcinin yanıtı okumaya devam etmesine izin verirken isteğin sona erdiğini bildirir. Bu, istek ardından yanıt veren protokoller için kullanışlıdır.

Bağlantı Hatalarını Ele Alma

Yaygın istemci hataları: ECONNREFUSED (dinleyen sunucu yok), ETIMEDOUT (ana bilgisayara ulaşılamıyor) ve EHOSTUNREACH. connect çağrısının sonucunu her zaman kontrol edin ve hataları kullanıcıya açıkça bildirin.

Kısa Kontrol

TCP istemcileri hakkındaki anlayışınızı sınayın.

Özet

Bir TCP istemcisi oluşturdunuz.

  • Önce soket oluşturun, ardından sunucunun sockaddr_in adresine bağlanın
  • bind gerekmez; çekirdek bir kaynak bağlantı noktası seçer
  • İsteği gönderin, yanıtı alın (verilerin tamamı için döngü kullanın)
  • İşiniz bittiğinde close veya shutdown kullanın; bağlantı hatalarını ele alın

Sıkça Sorulan Sorular

“TCP İstemcisi” dersi ücretsiz mi?

Evet — “TCP İstemcisi” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C Academy kursu toplamda 4 dersten oluşur.

“TCP İstemcisi” dersinde ne öğreneceğim?

Bağlanın ve gönderin C Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

C Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te C Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“TCP İstemcisi” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu C Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her C Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Soketlere Genel Bakış
  2. TCP Sunucusu
  3. TCP İstemcisi
  4. Birden Çok İstemciyi İşleme
← C Academy Sayfasına Dön