CodeBlanks Logo Icon CodeBlanks

TCP istemci

TCP istemci yazmayı öğrenirsin.

TCP istemci nedir?

Bir TCP istemci (client), bir sunucuya bağlanan taraftır. Önce soket oluşturur, sonra sunucu adresini hazırlar ve connect() ile bağlanır. Bağlantı kurulunca send ve recv ile veri alışverişi yapar.

Sunucu adresi sockaddr_in yapısıyla hazırlanır: addr.sin_family = AF_INET; addr.sin_port = htons(8080); addr.sin_addr.s_addr = inet_addr("127.0.0.1");. Burada htons port numarasını ağ bayt sırasına (network byte order) çevirir. inet_addr bir IP dizesini sayısal adrese çevirir. Sonra connect(sock, (sockaddr*)&addr, sizeof(addr)) ile bağlantı kurulur.

Adres yapısı hazırlama

sockaddr_in yapısı bir IPv4 adresini tanımlar. Üç temel alanı doldurursun: sin_family (AF_INET), sin_port (htons ile), sin_addr.s_addr (inet_addr ile). Hazırlanan adres connect ya da bind çağrısına aktarılır.

Örnek: sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_port = htons(8080); addr.sin_addr.s_addr = inet_addr("127.0.0.1");. 127.0.0.1 yerel makineyi (localhost) belirtir. connect çağrısında adres (sockaddr*)&addr biçiminde genel soket adresine çevrilir. Bu tür çevrim, POSIX API'nin adres türlerini birleştiren standart yoludur.

Uygulama TCP istemci bağlantısı kur

#include <sys/socket.h>, #include <netinet/in.h> ve #include <arpa/inet.h> ekle. int sock = socket(AF_INET, SOCK_STREAM, 0); ile soket oluştur. sockaddr_in addr; tanımla; addr.sin_family = AF_INET;, addr.sin_port = htons(8080);, addr.sin_addr.s_addr = inet_addr("127.0.0.1"); ata. connect(sock, (sockaddr*)&addr, sizeof(addr)); çağır. std::cout << "Bağlanıldı"; yaz.

Başlangıç kodu

main.cpp
#include <iostream>

// Soket başlıklarını ekle, soket ve adres hazırla

int main() {
    // socket, addr ve connect çağrılarını ekle
    return 0;
}

Örnek çözüm

main.cpp
#include <iostream>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int main() {
    int sock = socket(AF_INET, SOCK_STREAM, 0);
    sockaddr_in addr;
    addr.sin_family = AF_INET;
    addr.sin_port = htons(8080);
    addr.sin_addr.s_addr = inet_addr("127.0.0.1");
    connect(sock, (sockaddr*)&addr, sizeof(addr));
    std::cout << "Bağlanıldı";
    return 0;
}

Beklenen çıktı

Bağlanıldı

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Parçayı rolüne eşle

Kavram Anlamı
sockaddr_in Adres yapısı
htons(8080) Portu ağ sırasına çevirir
inet_addr("127.0.0.1") IP dizesini adrese çevirir
connect(sock, ...) Bağlantı kurar

2 htons ne yapar?

  • Veri gönderir
  • Portu ağ bayt sırasına çevirir Doğru cevap
  • Soketi kapatır
  • IP adresini çevirir

Açıklama: htons, port numarasını ağ bayt sırasına çevirir.

3 connect çağrısını tamamla

Soru
____(sock, (sockaddr*)&addr, sizeof(addr));
Cevap
connect(sock, (sockaddr*)&addr, sizeof(addr));

Açıklama: connect, istemciyi sunucuya bağlar.

İleri seviye bölümündeki tüm dersler