TCP istemci
- C++ kursu
- İleri seviye
- Ders 56/83
- 5 dk
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
#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
#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
____(sock, (sockaddr*)&addr, sizeof(addr));
connect(sock, (sockaddr*)&addr, sizeof(addr));
Açıklama: connect, istemciyi sunucuya bağlar.