C# ile Client Server Veri İletimi

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();
}
}

Oracle Exadata SQL Server Goldengate Weblogic EBS ve Linux konusunda aşağıdaki konularda 7×24 Uzman Danışmanlara yada Eğitimlere mi
İhtiyacınız var [email protected] adresine mail atarak Bizimle iletişime geçebilirsiniz.

– Oracle Veritabanı Danışmanlığı
– Oracle Veritabanı Bakım ve Destek
– Exadata Danışmanlığı
– Exadata Bakım ve Destek
– SQL Server Veritabanı Danışmanlığı
– SQL Server Veritabanı Bakım ve Destek
– Goldengate Danışmanlığı
– Goldengate Bakım ve Destek
– Linux Danışmanlığı
– Linux Bakım ve Destek
– Oracle EBS Danışmanlığı
– Oracle EBS Bakım ve Destek
– Weblogic Danışmanlığı
– Weblogic Bakım ve Destek
– Oracle Veritabanı Eğitimleri
– Oracle VM Server Danışmanlığı
– Oracle VM Server Bakım ve Destek
– Oracle EPPM Danışmanlığı
– Oracle EPPM Bakım ve Destek
– Oracle Primavera Danışmanlığı
– Oracle Primavera Bakım ve Destek
– Oracle Eğitimleri
– SQL Server Eğitimleri
– Goldengate Eğitimleri
– Exadata Eğitimleri
– Linux Eğitimleri
– Oracle EBS Eğitimleri
– Oracle VM Server Eğitimleri
– Weblogic Eğitimleri
– Oracle EPPM Eğitimleri
– Oracle Primavera Eğitimleri

About Mehmet Salih Deveci

I am Founder of SysDBASoft IT and IT Tutorial and Certified Expert about Oracle & SQL Server database, Goldengate, Exadata Machine, Oracle Database Appliance administrator with 10+years experience.I have OCA, OCP, OCE RAC Expert Certificates I have worked 100+ Banking, Insurance, Finance, Telco and etc. clients as a Consultant, Insource or Outsource.I have done 200+ Operations in this clients such as Exadata Installation & PoC & Migration & Upgrade, Oracle & SQL Server Database Upgrade, Oracle RAC Installation, SQL Server AlwaysOn Installation, Database Migration, Disaster Recovery, Backup Restore, Performance Tuning, Periodic Healthchecks.I have done 2000+ Table replication with Goldengate or SQL Server Replication tool for DWH Databases in many clients.If you need Oracle DBA, SQL Server DBA, APPS DBA,  Exadata, Goldengate, EBS Consultancy and Training you can send my email adress [email protected].-                                                                                                                                                                                                                                                 -Oracle DBA, SQL Server DBA, APPS DBA,  Exadata, Goldengate, EBS ve linux Danışmanlık ve Eğitim için  [email protected] a mail atabilirsiniz.

22 comments

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

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

  3. hocam ben client ve server taraflarının ikisinide yazdım tamam güzel çaışıyorda serverda gelen mesajı ekranda gösteremiyorum. ekran donup kalıo dinlemeye başladığında program

    • ayrıca hocam ben bunu ağ üzerindeki bilgisayarlar arasında yapmaya kalktığımda ne gibi değişiklikler yapmam gerekiyor. yada internet üzerinden olsa mesela. elinizde örnek varsa paylaşırmısınız ?

  4. Lise 3 Bilgisayar Bölümü Öğrencisiyim.Bana Dönem Ödevi Olarak Server/Client Projesi Verildi ve Bunu Form Üzerinde Yapmam Gerekiyor.Yardımcı Olabilecek ,Yol Gösterebilecek Biri var mı?

  5. İyi günler,
    C# üzerinde bir server-client programı yapıyorum. Programı biraz geliştirdim. Projem; Client’ın uzak noktada bir pc olduğunu düşünün herhangi bir kullanıcısı yok bir makine içine monte edilmiş bilgisayara kurulu olacak Client’a bir cihazdan sinyal geliyor gelen sinyal server’ a gönderiliyor. Server üzerinde bu bilgiyi görüntüleyebiliyorum ancak birden fazla client olucak ve her clienta bir cihaz bağlı olucak ve her client aldığı bilgiyi servera online olarak göndericek. ben bunların senkronizasyonunu nasıl yapabilirim yani aynı anda bikaç clienttan birden gelen bilgiyi serverda nasıl görüntüleyebilirim. server kısmında hangi clienttan geldiğini de görüntülemem gerekiyor. Yardımcı olursanız çok sevinirim.

  6. port kısmında hata veriyor bi türlü çözemedim.PortNo kısmına 7777 felanmı yazcam yoksa yukarıdaki kod aynen çalışıyormu

  7. hocam port u dinlerken timer kullanıyorum ama form gelen veriyi görüyor ama form üzerinde başka hiç bir işlem yapamıyorum kasıyor bunu nasıl çözebilirim

  8. Hocam local ağda alışan özel ve global mesajlaşabilen ve komut çalıştırabilen bir program geliştirdim fakat bu programı global çalıştırma istiyorum. nette araştırmalarım sonucunda da elle tutulur pek birşey çıkamdı yardımcı olursanız ço ksevinirim Protkolüm TCP

  9. Ben de benzer bir program yazmaya çalışıyorum yardımcı olabilir misiniz?

  10. server dan cliente nasıl veri yollarım?

  11. Hocam projeyi paylasırsanız çok memnun olurum üni. 4.sınıfım ve hoca bu projenin benzerini istedi ve 4 sene boyunca hiç bişey öğretmediler açıkçası benim içimdede öğrenme isteği yok dersten geçmem gerek size minnettar kalırım teşekkürler

  12. programın linkini atabilirmisiniz …

  13. Kodların bir çoğu hatalı !! Düzeltiniz

  14. kaynak kod mevcut ise lütfen verebilirmisiniz

  15. Hocam ben listview’e client tarafında veri ekleme silme ve düzenleme işlemi yaptırmak istiyorum yardımcı olabilir misiniz ?

  16. Greetings! Quick question that’s completely off topic. Do you know how to make your site mobile friendly? My site looks weird when viewing from my iphone 4. I’m trying to find a template or plugin that might be able to fix this issue. If you have any suggestions, please share. Thank you!

Leave a Reply

Your email address will not be published. Required fields are marked *