17 Kasım

2011

~~TcpListener Sınıfı~~

 

TcpListener sınıfı TCP protokolü ile çalışan servislere bağlanmamızı saglar.

Parametre olarak bizden Ip Ver Port İster. Arkadaşlar Ip üzerinde Duralım Ip Bilgisayarımızın Kimlik numarasidir ag ortaminda faklı ( 192.168.1.100 ) İnternet üzerinde farklı( 88.255.83.153) dir

Port Kapi anlamina gelir,genellikle dört haneli rakam alir örnek olarak .Sql Server’in port numarası 1433’tür.Arkadaşlar TcpListener Isminden de anlanılacagı gibi dinler  nasi?Bir Şirkete girdiniz Karşınıza gelecek Olan Kapidir( Port ) kapiyi açtıktan sonra Herhangi bir odaya girersiniz( Ip) inşallah anlamışsınızdır.

~~NetworkStream Sinifi~~

 

Yapacagımız projede client’ten server’a mesaj yollaya bilmek Stream Kullanmamiz lazim böyle işlemler içinde NetworkStream Kullaniyoruz(Not:Bu Sinifi Kullanabilmek İçin System.IO Ekli olmasi gerekir.

 

~~TcpClient~~

 

Tcp servislerine bağlantı sağlamak için TcPClient sınıfı kullanılır.

 

Connect();

 

Bu Metod ile Baglanti Kurulur Parametre olarak Ip Ve Port Alir

 

GetStream();

Bu metod ile belirtilen port tan gelen veriler bir NetworkStream nesnesine aktarılır. GetStream metodunun geri dönüş değeri NetworkStream olduğu için atama işlemini NetworkStream türünden bir nesneye yapmamız gerekir.

Bilgileri Aldik Hadi Projeye GeçelimJ

Console Ugulamasi

Server Tarafı

namespace ServerApp

{

class Program

{

static void Main(string[] args)

{

TcpListener listener = new TcpListener(IPAddress.Any, 7777);

listener.Start();

Console.WriteLine(“Dinleme başladı..”);

for (; ; )

{

TcpClient client = listener.AcceptTcpClient();

if (client.Available == 0) continue;

Console.WriteLine(“Biri geldi..”);

Stream stream = client.GetStream();

byte[] data = new byte[client.Available];

stream.Read(data, 0, data.Length);

string text = Encoding.Default.GetString(data);

Console.WriteLine(text);

stream.Flush();

}

}

}

 

 

 

Client Uygulamasi Windows App

Button Click Olayi

private void button1_Click(object sender, EventArgs e)

{

string yazi = ”Emrah: “ + textBox1.Text;

byte[] gidecekData = Encoding.Default.GetBytes(yazi);

TcpClient client = new TcpClient();

client.Connect(“Ag Ortamindaki IP’niz Ornek(10.8.25.36)”, 7777);

Stream stream = client.GetStream();

stream.Write(gidecekData, 0, gidecekData.Length);

stream.Flush();

}

 

C#’ta mail göndermek uygulamasindan önce mail gönderme isleminin nasil çalistigi konusuna biraz deyinelim.
Mail gönderebilmek için bir sunucuda iki adet protokol vardir: Mail Gönderme Protokolü, Mail Alma Protokolü.
Mail Alma Protokolü
Bir e-posta sunucusundaki mailleri alabilmek için kullanilan protokoldür. POP3 ya da IMAP bu protokollerin basindadir.
POP3 (Post Office Protocol 3)
SMTP olarak adlandirdigimiz protokollerle gönderdigimiz mailler eger kisiye ulasmamissa, otomatik olarak farkli yollar denenir. Farkli yollarla yine ulasmiyorsa bize bir hata mesaji gönderir. Fakat POP3 servisini bir posta kutusu gibi düsünebiliriz. Bir e-posta geldiginde sunucu içerisinde gelen posta kutusuna kaydedilir, kullanici istediginde POP3 servisi ile istedigi yazilimi kullanarak bu postalari alabilmektedir.
IMAP (Internet Mail Access Protocol)
POP3 gibi, sunucuda kayitli olan e-postalara ulasabilmek için kullanilan bir protokoldür. POP3′ten farki, birden çok bilgisayardan bir mesaja ulasilabilmesidir. POP’da bir e-postaya tek bir bilgisayardan erisim saglanabilmektedir.
Mail Gönderme Protokolü
SMTP (Simple Mail Tranfer Protocol)
E-Posta göndermek için sunucu ve istemci arasindaki iliskiyi kuran protokoldür. E-Posta gönderme islemini bir örnekle inceleyelim:
Benim mail adresim: . Mail gönderme protokolü olarak POP3′ü kullaniyorum. Yani benim web sitemin bulundugu sunucumda POP3 protokolüyle mail gönderen bir mail sunucusu da yer almaktadir.  mail adresine mail gönderdigim zaman mail öncelikle POP3 protokolü ile mail sunucuma gelir, oraya kaydedilir, sunucu maili gönderilecek kisiye iletir.
——————————————————-
C#’ta e-posta gönderme islemini inceleyelim:
Mail islemlerini yapabilmek için öncelikle using bölümüne asagidaki namespace’i ekleyelim:
using System.Net.Mail;
Mail gönderebilmek için bu namespace içerisinde bulunan MailMessage ve SMTPClient siniflarindan faydalanacagiz.

Mail mesajimi olusturabilmek için MailMessage sinifi türünden bir degisken olusturmamiz gerekmektedir.

MailMessage ePosta = new MailMessage();
ePosta degiskenimiz, göndecegimiz e-posta’mizin bütün elemanlarini bulundurmaktadir.
————————–
From : E-Posta’nin kimden gönderilecegi bilgisini tutar. MailAddress türünden bir degisken istemektedir.
ePosta.From = new MailAddress(“mail adresi”);
————————–
To : E-Postanin kime/kimlere gönderilecegi bilgisini tutar.
ePosta.To.Add(“mail adresi);
ePosta.To.Add(“mail adresi”);
ePosta.To.Add(“mail adresi”);
————————–
Attachments : E-Postaya eklenecek eklentilerin bilgisini tutar.
ePosta.Attachments.Add(new Attachment(@”C:\deneme.txt”));
————————–
Subject : E-Posta’nin konusu bilgisini tutar.
ePosta.Subject = “Konu”;
————————–
Body : E-Posta’nin içerik bilgisini tutar.
ePosta.Body = icerik;
————————–
SMTPClient : E-Posta’nin gönderilecegi SMTP sunucu ve gönderen kullanicinin bilgilerinin yazilip, MailMessage türünde olusturulan mailin gönderildigi siniftir.
SmtpClient smtp = new SmtpClient();
————————–
Credentials : E-Posta’yi gönderen kullanicinin kimlik bilgilerini tutar.
smtp.Credentials = new System.Net.NetworkCredential(“mail adresi”, “sifre”);
————————–
Port : SMTP sunucusunun port bilgisini tutar.
smtp.Port = 25;
————————–
Host : SMTP sunucusunun isim bilgisini tutar.
smtp.Host = “smtp.zirvedekibeyinler.net”;
————————–
EnableSsl :Sunucu SSL istiyorsa bu degeri true yapacagiz.
smtp.EnableSsl = true;
————————–
SendAsync : E-Posta’yi asenkron olarak gönderir. Yani e-posta gönderilene kadar çalisan thread kapanmaz, gönderme islemi tamamlandiktan sonra kapatilir.
smtp.SendAsync(ePosta, (object)ePosta);
————————–
Send : E-Posta’yi gönderme islemini yapar. Sunucuya göre Send ya da SendAsync metodlarindan birisi kullanilir.
smtp.Send(ePosta);
————————–
Asagidaki uygulama, C# dili kullanilarak GMAIL hesabindan baska bir hesaba mail gönderme islemini gerçeklestiren fonksiyondur:

public bool Gonder(string konu, string icerik)
{
MailMessage ePosta = new MailMessage();
ePosta.From = new MailAddress(“mail adresi”);
//
ePosta.To.Add(“mail adresi”);
ePosta.To.Add(“mail adresi”);
ePosta.To.Add(“mail adresi”);
//
ePosta.Attachments.Add(new Attachment(@”C:\deneme.txt”));
//
ePosta.Subject = konu;
//
ePosta.Body = icerik;
//
SmtpClient smtp = new SmtpClient();
//
smtp.Credentials = new System.Net.NetworkCredential(“mail adresi”, “sifre”);
smtp.Port = 587;
smtp.Host = “smtp.gmail.com”;
smtp.EnableSsl = true;
object userState = ePosta;
bool kontrol = true;
try
{
smtp.SendAsync(ePosta, (object)ePosta);
}
catch (SmtpException ex)
{
kontrol = false;
System.Windows.Forms.MessageBox.Show(ex.Message, “Mail Gönderme Hatasi”);
}
return kontrol;
}

01 Ağustos

2011

MD5 ( Message-Digest Alghoritm 5) isimli algoritma, günümüzde sifreleme konusunda en çok kullanilan sifreleme algoritmalarindan birisidir. Sifrelemek istenilen veriyi 128 bit uzunlugunda sifreler ve tek yönlü sifreleme algoritmasi (sadece sifreleme özelligi var) olarak da bilinir.
Genellikle sifre saklamak için kullanilmaktadir.
MD5 algoritmasi, .Net’in kütüphanesinde mevcuttur. Simdi bu algoritmanin C# dili ile nasil kullanilacagini inceleyelim.
Öncelikle projemize
using System.Security.Cryptography; namespace’ini ekleyelim.

Veritabanina sifremizi MD5 algoritmasiyla sifreleyerek kaydetmek istiyoruz. Bunun için MD5eDönüstür isimli fonksiyonu inceleyelim.

public static string MD5eDonustur(string metin)
{
MD5CryptoServiceProvider pwd = new MD5CryptoServiceProvider();
return Sifrele(metin, pwd);
}

Sifremizi, MD5CryptoProvider isimli degisken yardimiyla sifremi Sifrele fonksiyonunda MD5′e dönüstürdük:

private static string Sifrele(string metin, HashAlgorithm alg)
{
byte[] byteDegeri = System.Text.Encoding.UTF8.GetBytes(metin);
byte[] sifreliByte = alg.ComputeHash(byteDegeri);
return Convert.ToBase64String(sifreliByte);
}

Metnimizi Sifrele fonksiyonuyla sifreledik. Önce metnimizi byte dizisine aktardik ve bu diziyi MD5 algoritmasiyla sifreleyip sonucu string türünde geri döndürdük.
Kodumuzu bir örnek ile deneyelim:
label1.Text = MD5eDonustur(textBox1.Text);

Toplam 25 sayfa, 1. sayfa gösteriliyor.12345...1020...Son »