C# ile Soket Programlama

Konu Başlıkları

  • Soket Programlama Nedir?
  • IP Nedir?
  • Port Nedir?
  • İstemci – Sunucu Modeli
  • Sunucu Oluşturma
  • İstemci Oluşturma
  1. Soket Programlama Nedir?

Her uygulamanın ağ ortamına veya internet ortamına erişmesi günümüzde bir gereklilik haline gelmiştir. Uygulamanın ağ ortamına veya internet ortamına erişmesine olanak sağlayan ara yüze SOKET adı verilmektedir.  Soket programlama her programlama dilinin ilgili komutları kullanılarak yapılır.

  • IP Nedir?

Ağ üzerindeki her cihazın bir kimliği vardır. Bu kimliğe IP (Internet Protocol) adı verilir.  Günümüzde halen IPv4 versiyonunu kullanmaktayız. Ancak yakın bir tarihte IPv6 versiyonuna geçilmesi planlanmaktadır.

IPv4, 32 bit lik bir sayıdır. IPv4 yapısı aşağıda görülmektedir.

IPv6 128 bitlik hexadecimal(16 lık tabanda sayı) bir sayıdır. IPv6 yapısı aşağıda görülmektedir.

  • Port Nedir?

Portlar fiziksel ve sanal olmak üzere iki kısımda incelenir. Fiziksel portlar USB, Ethernet vs. portlarıdır. Bu portların protokolleri ve fiziksel yapıları çoğu zaman programcıları ilgilendirmez sadece kullanılır. Sanal portlar ise birden fazla yazılımın aynı anda ağ ortamına erişebilmesi için  geliştirilmiş mantıksal bağlantı noktalarıdır. Bu portlardan bazıları bazı uygulamalara ayrılmış durumdadır. Aşağıda bu portlar görülmektedir.

Yukarıda görülen portların dışındaki portlar herhangi bir uygulama tarafından kullanılabilir.

  • İstemci – Sunucu Modeli

Ağ üzerindeki iletişim, karşılıklı iki cihazın veriyi birbirlerine göndermesi şeklinde gerçekleşir. Bu sırada veriyi alan istemci, veriyi gönderen sunucu olarak isimlendirilebilir. Bir cihaz hem istemci, hem de sunucu olabilir. Farklı portlar üzerinden veriyi hem alabilir hem gönderebilir.

,

  • Sunucu Oluşturma

Soket programlamayı anlamak için karşılıklı mesajlaşabileceğimiz sunucu ve istemciden oluşan iki adet program yazalım. İlk olarak sunucudan başlıyoruz.

C# ile sunucu oluşturmak için ilk önce aşağıdaki kütüphaneler eklenmelidir.

Ardından adım adım sunucu uygulamamızı yazalım.

İlk olarak sunucumuzun çalışacağı ip adresini uygulamamıza bildirelim.

127.0.0.1 adresi tüm bilgisayarlar için varsayılan ip adresidir. Eğer sunucu ve istemci aynı makinada çalıştırılacaksa bu ip adresini kullanabilirsiniz. Eğer sunucu ve istemci farklı bilgisayarlarda çalışacaksa ağ üzerindeki gerçek ip adresini kullanmak gerekir. Ağ üzerindeki IP adresi ağ bağdaştırıcısının özelliklerine bakılarak öğrenilebilir.

İkinci adımda port numarası da belirtilerek yukarıda belirtilen ip adresi dinlenilmeye başlanıyor.

Üçüncü adımda dinlenilmekte olan port ve ip den gelecek bağlantı isteklerini kabul edecek soket oluşturulur.

Dördüncü adımda gelen veri okunur.

Burada gelecek veriye göre bir byte dizisi tanımlanır ve veri bu byte dizisine aktarılır. k isimli değişkene ise gelen verinin byte uzunluğu aktarılır.

Sunucu tarafından veri alındıktan sonra istemciye onay mesajı gönderilmek istenilirse aşağıdaki şekilde cevap verilebilir.

Bu adımda metin şeklindeki veri ASCIIEncoding tarafından byte dizisine dönüştürülür.

Son olarak sunucu durdurulur.

  • İstemci Oluşturma

 C# ile istemci oluşturmak için ilk önce aşağıdaki kütüphaneler eklenmelidir.

Ardından adım adım istemci uygulamamızı yazalım.

Birinci adımda bağlanılacak olan IP ve port numarası belirtilerek bağlantı isteği gönderilir.

Bağlantının sunucu tarafından kabul edilmesinin ardından gönderilecek mesaj kullanıcıdan(veya herhangi başka bir kaynaktan) alınır, byte a dönüştürülür ve gönderilir.

Sunucuya mesaj iletildikten sonra cevap bekleniyorsa aşağıdaki şekilde dönen mesaj bir byte dizisine aktarılır.

Burada k isimli değişkende gelen verinin byte uzunluğu yer alır.

Son olarak istemci durdurulur.

Geliştirilen uygulama çalıştırıldığında aşağıdaki gibi bir sonuç elde edilir.

Sunucu:

İstemci:

Konu İle İlgili Videolar

C# ile Soket Programlama-1
C# ile Soket Programlama-2
C# ile Soket Programlama-3
C# ile Soket Programlama-4

Örnek Uygulama

https://github.com/omerozcann/CSharpBasitSoketProgramlama

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir