C++
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.
Örnek çözümü göster
#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;
}
Kendini test et
-
Parçayı rolüne eşle
- 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
-
htons ne yapar?
- Veri gönderir
- Portu ağ bayt sırasına çevirir
- Soketi kapatır
- IP adresini çevirir
Cevabı göster
Portu ağ bayt sırasına çevirir — htons, port numarasını ağ bayt sırasına çevirir.
-
connect çağrısını tamamla
____(sock, (sockaddr*)&addr, sizeof(addr));
Cevabı göster
connect(sock, (sockaddr*)&addr, sizeof(addr));
Sıradaki ders: TCP sunucu