Server/ Client diğer adıyla Sunucu/İstemci yapısı günlük hayatta veri iletimi sırasında çokça kullandığımız bir yapıdır. İnternette bir siteye bağlanırken istemeden zaten bu yapıdan faydalanırız. Veri beklenen sitenin sunucusu (Server) default olarak belirtilmiş olan 80 numaralı portu gelen bağlantı istekleri için sürekli olarak dinler.

Gelen bağlantıları diğer bir port ile meydana getirdiği soket ile sarmalar ve yönlendirir. Bundan dolayı sunucu  yani server sürekli olarak 80 numaralı portu dinlemiş olur. Siteye bağlanan kişi yani client sitenin bilgi aldığı taraftaki sunucuya bağlantı isteğinde bulunur.

Eğer server client un isteğini kabul ederse , ona bir soket nesnesi açar ve farklı bir port’tan kendisiyle iletişim kurmasını sağlar. Soket yapıları  tamamiyle mantıksaldır Fiziksel hiçbir elemanla ilgisi yoktur.

Server tarafında sürekli olarak  bir dinleyici (listener diye bilinen) soketi bulunur. Bu dinleyici soketler yalnızca belli bir portu dinlerler. Tüm bağlantıları isteklerini bu port üzerinden kabul eder veya bunları reddeder. Bu soketler kabul ettiği bağlantılarla ilgilenmek için handler denen nesneler oluşturur ve aynı şekilde bu portu dinlemeye koyulur. Böylece sürekli  olarak dinlenen port değişmemiş olur.

Tipik olarak bir soketin oluşumu aşağıda  verilecektir. Burda stream şeklinde bir soket nesnesi oluşturulacaktır. Çünkü TCP/IP protokolü stream şeklinde ele alınır. Son olarak da protokolün tipi TCP olarak belirlenir.

Öte yandan listener soketinin hangi IP adresinden geleceğinin bilgisi, hangi portun dinlenmesi gerektiği belirtilmedir. Default olarak “127.0.0.1”  adresi localhost IP adresidir.

TCP protokolüyle Client tarafından server a bilgi yollama kodu aşağıdaki gibidir.

CheckForIllegalCrossThreadCalls = false;
try
{
TcpClient SendMesaj = new TcpClient(IP, PortNo);
NetworkStream stream = SendMesaj.GetStream();
string GelenKutusu = richTextBox2.Text;
byte[] Buffer = Encoding.ASCII.GetBytes(GelenKutusu);
byte[] GelenBuffer = new byte[SendMesaj.ReceiveBufferSize];
if (stream.CanWrite)
{
stream.Write(Buffer, 0, Buffer.Length);
}
else
{
SendMesaj.Close();
return;
}
if (stream.CanRead)
{
stream.Read(GelenBuffer, 0, (int)SendMesaj.ReceiveBufferSize);
string DurumMesaj = Encoding.ASCII.GetString(GelenBuffer);
label3.Text = DurumMesaj;
label3.Visible = true;
}
else
{
SendMesaj.Close();
return;
}
}
catch
{
MessageBox.Show("Mesaj Gönderme İşlemi Başarısız");
}

Aynı şekilde sürekli olarak belirli bir porttan veri olup olmadığını yoklayan server kodu da aşağıda verilmiştir.

public void PortuYokla()
{
CheckForIllegalCrossThreadCalls = false;
string Durum = "Mesajiniz basariyla Gonderilmistir.";
string IP_Adres;
string AlınanVeri;
TcpListener myListener = new TcpListener(PortNo);
byte[] AlınanVeriBufferı = new byte[4096];
byte[] GonderilecekBuffer = Encoding.ASCII.GetBytes(Durum);
while (true)
{
myListener.Start();
Socket soket = myListener.AcceptSocket();
soket.Receive(AlınanVeriBufferı, AlınanVeriBufferı.Length, 0);
AlınanVeri = Encoding.ASCII.GetString(AlınanVeriBufferı);
richTextBox2.Text = (AlınanVeri);
AlınanVeri = "";
IP_Adres = soket.RemoteEndPoint.ToString();
textBox2.Text = IP_Adres;
soket.Send(GonderilecekBuffer, GonderilecekBuffer.Length, 0);
myListener.Stop();
}
}

Mehmet Salih Deveci

Bilgisayar Mühendisi

Reklamlar
yorum
  1. aura cleanmax dedi ki:

    Gerçekten çok faydalı bir yazı Teşekkürler

  2. Serhat dedi ki:

    Çok güzel hocam. Fakat ben ypamaya uğraştım bazı yerlerde hata alıyorum acaba projeyi paylaşmanız mumkunmudur teşekkurler.

    • BİLGİSAYAR MÜHENDİSİ dedi ki:

      Hata aldığın yerleri söylersen sana daha çok yardımcı olurum. Kaynak kodları göndermem senin iyiliğine olmaz.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s