İstemci cihaz, sunucu cihaza bağlanmak için sorgu gönderir, sunucu cihaz bu sorguyu kabul eder ve ardından bağlantı gerçekleşmiş olur. Soket programlamanın mantığı kabaca böyledir.
Socket Programlama
Diyelim ki bir trojan geliştirmek istiyorsunuz ya da WhatsApp gibi bir mesajlaşma uygulaması veya çoklu oyuncu desteği olan çevrimiçi bir oyun. Tüm bu uygulamaları geliştirebilmek için kaçınılmaz şekilde ortak bir yapı kullanmak zorundasınız. Çünkü bu saydığımız uygulamalar sunucu (server) ve istemci (client) tabanlı uygulamalardır. Peki bu ne demek? Bir mesajlaşma uygulaması üzerinden açıklamaya çalışayım, şöyle ki; mesajlaşabilmek için bildiğiniz üzere en az 2 kişi olmalısınız yani iki farklı cihazın birbiri ile bağlantı kurması ve veri alışverişi yapabilir durumda olması gerekmekte. Tabii bu bağlantı kurma ve veri alışverişi yapabilme durumu bir prosedür üzerinden ilerliyor, işte bu prosedür soket programlama dediğimiz şeyin ta kendisi. Prosedürün işleyişi her zaman için aynıdır; istemci cihaz, sunucu cihaza bağlanmak için sorgu gönderir, sunucu cihaz bu sorguyu kabul eder ve ardından bağlantı gerçekleşmiş olur. Soket programlamanın mantığı kabaca böyledir. Bir soket program yazıyorsak kullanacağımız 3 değer vardır. İlki sunucu bilgisayarın dış ip adresi (external ip), ikincisi iletişim için kullanılacak protokol ve son olarak da port adresi. Soket uygulamalarda iletişim için TCP (transmission control protocol) ve UDP (user datagram protocol) protokolleri kullanılmaktadır. Hemen bu protokolleri tanıyarak devam edelim.TCP
UDPden en önemli farkı güvenli veri alışverişi sağlamasıdır. Gönderici, veriyi gönderirken aynı zamanda bir de kontrol mesajı ile verinin alıcı tarafından alınıp alınmadığını teyit eder, eğer veri alıcıya ulaşmamışsa tekrar gönderir. İşte tam da bu yüzden mesajlaşma ve dosya transfer uygulamaları gibi 1 byte'ın dahi önem taşıdığı uygulamalarda TCP protokolünü kullanmamız gerekir.UDP
TCP'ye nazaran daha hızlı ancak güvensiz bir iletişim protokolüdür. Gönderici, veriyi alıcıya gönderir ancak alıcı tarafından verinin alınıp alınmadığını kontrol etmez, bu yüzden de veri transferinde kayıplar yaşanabilir. Veri transferinde gönderim hızının veri kayıplarından daha önemli olduğu uygulamalarda kullanılır. Örneğin görüntülü ve sesli konuşma uygulamalarında kullanılabilir. Fark etmişsinizdir, görüntülü konuşmalarda bazen karşı tarafın görüntüsünün arada donduğu veya bulanıklaştığı olmuştur. Bu durumun sorumlusu UDP protokolüdür.Bir soket yazılım aracılığı ile veri transferi yapmak istiyorsak bağlantı kuracağımız bilgisayarın yalnızca ip adresini bilmemiz yeterli değil. Birbirinden bağımsız tüm veri transferlerinin gerçekleştirilebilmesi için port adreslerini de kullanmak zorundayız. Mesela aynı anda hem internetten dizi izliyor hem program indiriyor hem de mesajlaşıyor olabilirsiniz. İşte tüm bu işlemlerin aynı anda ve sorunsuz gerçekleşmesi için portları kullanmak zorundayız. Soket programlamanın işleyişi bu şekildedir. Konunun daha iyi kavranması adına soket programlama ile ilgili bir sonraki makalemde örnek bir proje hazırlayacağım, takipte kalarak örnek projeyi inceleyebilirsiniz.