C# da Sınıf kütüphaneleri kullanılarak Çok geniş çaplı Network programları yapılabilir.Biz bu örneğimizde basit Socket yapıları ile ufak bir konsolda çalışan server programı yapacağız :) Program sizin belirttiğiniz portu dinleyerek bağlantıları bekleyecek ve gelen textleri tekrar size gönderen basit bir server programıı :) Amaç olayın mantığını anlamak gerisi size kalmış ! Örneğin Trojan diye bildiğimiz programlar bu mantıkla çalışır.Yani kendisine gelen emirleri yorumlar ve Konak makinada gerekenleri yapan programlardır.Örnekleri çoğaltabiliriz v.s v.s :)
using System; // Ana Başlık . Her zaman Ekleyin
using System.IO ; //StreamReader ve StreamWriter sınıfları için gerek
using System.Net.Sockets; // Socket, TcpListener ve NetworkStream siniflari için
public class Server
{
public static void Main()
{
//Bilgi alış verişi için bir Port belirtiyoruz
TcpListener TcpDinleyicisi = new TcpListener(6666);
TcpDinleyicisi.Start();
Console.WriteLine("Sunucu Başlatıldı :)") ;
//Socket Bağlantımızı Yapıyoruz :)
Socket IstemciSoketi = TcpDinleyicisi.AcceptSocket();
// Bağlantının Sağlanıp sağlanmadığını Kontrol edin mutlaka if (!IstemciSoketi.Connected)
{
Console.WriteLine("Sunucu Başlatılamıyor");
}
else
{
//Sonsuz Döngü ile Sürekli Kontrol ediyoruz Bilgiyi while(true)
{
Console.WriteLine("İstemci Bağlandı");
//IstemciSoketi verilerini NetworkStream sınıfı türünden nesneye aktariyoruz.
NetworkStream AgAkimi = new NetworkStream(IstemciSoketi);
//Soketteki bilgilerle islem yapabilmek için StreamReader ve StreamWriter siniflarini kullaniyoruz
StreamWriter AkimYazici = new StreamWriter(AgAkimi);
StreamReader AkimOkuyucu = new StreamReader(AgAkimi);
//StreamReader ile String veri tipine aktarma islemi önceden bir hata olursa bunu handle etmek gerek
try
{
string IstemciString = AkimOkuyucu.ReadLine();
Console.WriteLine("Gelen Bilgi:" + IstemciString);
//Istemciden gelen bilginin uzunlugu hesaplaniyor
int uzunluk = IstemciString.Length;
//AgAkimina, AkimYazını ile IstemciString inin uzunluğunu yazıyoruz
AkimYazici.WriteLine(uzunluk.ToString());
AkimYazici.Flush() ;
}
catch
{
Console.WriteLine("Sunucu Kapatılıyor");
return ;
}
}
}
IstemciSoketi.Close();
Console.WriteLine("Sunucu Kapatılıyor");
}
}
Burada Bazı bilgiler vermek istiyorum . Yukarıdaki örnekte Bağlantı için bir port belirledikten sonra bir socket tanımlıyoruz.İnternet iletişiminde server Client ile bir socket üzerinden haberleşir.Socket dediğimiz kavram aslında bir numaradan başka bir şey değildir.Bir nevi sizin için bir kanaldır.Ve kanal üzerinden haberleşme sağlanıyor.
Bir sonraki bölümde Client Programını İnceleyeceğiz :) İsterseniz Siz telnet programı ile programınızı test edebilirsiniz . Örneğin ;)
telnet localhost 6666
yazarak kendi üzerinize 6666 ile bağlanabilirsiniz.Programı geliştirmek sizin elinizde .Açılışta port numarasını Console.ReadLine(); ile sorarak port numarasını dinamik olarak belirtebilirsinizzz. Neyse Kolay gelsin ;)