Öncelikle herkeze merhaba diyerek söze başlayalım..
C# ile son zamanların şüphesiz en popüler ve merak edilen konularından biri olan socket programlama konusuna dilim döndüğü kadar değineceğim.Daha öncede benzer olarak c ile örnek bir telnet tabanlı socket sunucu anlatımı yapmıştım.Hemen hemen mantık benzerdir.
Şimdi biz bunu c# ile daha dinamik bir mimariye giydirelim.İlk olarak sınıfları incelemekle başlayalım..Bilindiği üzere c# nesneye dayalı programlama dillerinden biridir.Doğal olarak iletişimin nesnelerr üzerinden yürütülmesi karşılaşılacak mantıksSystem.IOal bir doğrudur.Seviye olarak bir çok arkadaşımız bilir c# ayrıntılardan refaha ermemizi sağlamıştır.Bu yüzdendirki sanırım ben daha çok socket programlama eğiliminde bulunanların c# nesne yönelimli programlama dilini seçtiğini görmekteyim..Öncelikle c# ile network programla diğer dillere nazaran daha basit bir yapıdadır.Yavaş yavaş konunun aslına yönelelim şimdi;
Ağ programlamada isimalanı yani "NameSpace" buna isim uzayıda denilmektedir,System.Net.Sockets isim alanlarını kullanacağız ve bu uzayların altındaki sınıfları genellikle kullanacağız.Hemen dosyalama işlemlerinde kullanacağımız isim uzayını ve WriteLine() ReadLine() "Ki c ile verdiğim örnek sunucu anlatımında değinmiştim bu okuma ve yazma methodlarına"değindikten sonra bu methodlarda dosyadan data okuma yerine ağdan veri okuma ve yazdırma işlemlerini yapacağımızı hatırlatmak istiyorum.İsterseniz şimdi yavaş yavaş kullanacağımız sınıf kavramlarına giriş yapalım;
SOCKET CLASS
Az çok socket programlama mantığını kapmış biri gerçekleştirilen iletişimin socket lere bağlı olduğunu ve socketler üzerinden yapıldığını bilebilir.Şimdi bu sınıftan bir bildirim nesnesi meydana getirelim.

Bu kodu sadece üyeler görüntüleyebilir! Üye olmak için
tıklayın Üye iseniz
giriş yapın.
Hemen açıklayalım bu parametreler ne işe yarar?
AdressFamily=Adresleme türü
SocketType=Socket tipi/türü daha çok taban olarak ne kullandığını belirtir.Örneğin byte veya mesaj
ProtocolType=Protokol türünü ifade etmektedir
Şimdi değinmek istediğim diğer bir sınıf var özellikle sunucu tarafını kolaylaştıran TCPListener sınıfı..
TCPLİSTENER CLASS
Yine yukarıdaki sınıfta verdiğimiz örnek gibi bildirim meydana getirelim..Bu bildirim listener sınıfını kullanarak dinleme nesnesi yaratsın..

Bu kodu sadece üyeler görüntüleyebilir! Üye olmak için
tıklayın Üye iseniz
giriş yapın.
Bu listener sınıfına 3 yapılandırıcı kurmak mümkün.Bu yapılandırıcılar dinleme nesnesidir.Hemen onlarıda sıralayalım..
IPEndPoint
IP adres,Port numarasını geçerek
Yalnız Port numarası ile çağırma
IPEndPoint sınıfı kullanıp ip ve port numarası barındıran bilgileri kullanarak çağırma
Şimdide start() methodunu kullanalım.Dinleme nesnesi oluşturulmuşsa nesneyi dinlemek için mevcut start methodunu kullanırız.Basit haliyle özetlersek;

Bu kodu sadece üyeler görüntüleyebilir! Üye olmak için
tıklayın Üye iseniz
giriş yapın.
Bu method parametre almadı dikkat ederseniz.Bir bildirim yapalım bu methoda..

Bu kodu sadece üyeler görüntüleyebilir! Üye olmak için
tıklayın Üye iseniz
giriş yapın.
Socket uyumunun sağlandığı noktada gelen bağlantıların kabul edilmesi aşaması boy gösterecektir.Bu durumda AcceptSocket() methoduna başvuracağız.
Özetleyelim yine;

Bu kodu sadece üyeler görüntüleyebilir! Üye olmak için
tıklayın Üye iseniz
giriş yapın.
İstersek eğer socket bağlandı veya bağlanmadı bunun kontrolünüde yine Connected() bool türünden geri dönüş değeri sağlayan methodu kullanabiliriz.
Biraz daha ilerleyelim ve Client konusuna gelelim.Burada karşımıza çıkan sınıf ise;
TCPCLIENT CLASS
Diyelimki bir sunucumuz var.Ve bu sunucuya bağlanmak istiyoruz.İstemci taraflı bir sınıfımız olan TCPClient sınıfı burada imdadımıza yetişiyor.Ve bağlantının ne kadar kolay gerçekleştiğine tanık olacağız hep birlikte..

Bu kodu sadece üyeler görüntüleyebilir! Üye olmak için
tıklayın Üye iseniz
giriş yapın.
Şimdi buraya kadar herşey güzel.Ancak veri alışverişlerinde bazı bilgiler kullanılacaktır.Bunları NetworkStream sınıfına aktarmamız gerekiyor.Onuda yapalım hemen;

Bu kodu sadece üyeler görüntüleyebilir! Üye olmak için
tıklayın Üye iseniz
giriş yapın.
Biraz NetworkStream Sınıfından bahsedelim..
NetworkStream(az önce yukarıdada örneğini yaptığımız kullanım mantığı)kendisine gönderilen socket nesnesine ait dataları yine kendi sınıfının türünden bir nesnede tutar.
Bu ne işimize yarar dersek en basitinden c# dilinin bizi bazı ince detaylardan kolaylıkla kurtardığını söylemiştik.Burada kanıtlıyor bunu.Bu sınıfa kaydedilen bilgileri kullanmak istediğimiz zaman System.IO uzayında mevcut olan StreamReader ve StreamWriter sınıfları ile okuruz
Örnek vererek anlatalım;

Bu kodu sadece üyeler görüntüleyebilir! Üye olmak için
tıklayın Üye iseniz
giriş yapın.
Genel olarak c# nesne yönelimli programlama dili ile socket programlamaya bir giriş yaptık.Sınıfları ve kullanımlarını gördük.Kullanım alanlarına değindik.Bağlantıların nasıl yapılacağını,gelen bağlantıları kabul etme aşamasını,ağ hareketlerini izlemeyi ve hareketlerin ağdan okunmasını öğrendik..Şimdilik burada noktalıyorum.Bu yazıyla birlikte daha sık remote connection olaylarıyla ve bu tarz soket yapılarına değineceğiz..
Kolay gelsin.
Oguz-Coder | thecoders.net