TurkProgrammers.NeT
Ana sayfa Ana Sayfa | Ana sayfanız yapın | Sık kullanılanlara ekle | Rss/Rdf Besleme| JavaScript
Bölümler
Arşiv
paz sa ça cu cum pa
12345
6789101112
13141516171819
20212223242526
2728293031

Mailinizi ekleyin
Haberlere abone olun:

anket: Web Programcılığının Geleceğini nasıl görüyorsunuz
Web Programcılığının Geleceğini nasıl görüyorsunuz?
Önü Fazlası ile açık
ilerde yapacak web sitesi kalmayacak
Hazır sistemler işleri iyice bitirecek
Bugünden daha kötü olamaz
Anket sonuçları | Eski Anketler


email Arkadaşınızın maili | print Yazıcı versionu | comment Yanıtlar (1 Gönder)

Delphi ile Network Üzerinden Veri İletimi

by Mr. CanaWar on Temmuz 29,2007

image

DELPHİ İLE NETWORK ÜZERİNDEN VERİ İLETİMİ

Delphi bizlere ağ üzerinden veri iletimini sağlayan birçok nesne sunmaktadır (Internet, intranet, local). Bu makalede 2 Delphi bileşeni üzerinde inceleme yapacağız: TserverSocket ve TclientSocket. Bu iki bileşen TCP/IP bağlantıda okuma ve yazma işlemleri için tasarlanmıştır. Bu makalede ağ üzerinde iletişim kuran basit bir uygulama yapacağız.

Winsock ve Delphi soket bileşenleri

Windows soketleri veya Winsock, Microsoft Windows altında network programlama için bir açık arayüzdür. Winsock, protokol yığın servislerine ulaşabilmek için bize bir takım fonksiyonlar, veri yapıları v.b. imkanlar sunar.

Delphi soket bileşenleri, başka sistemlerle TCP/IP üzerinden ve ilgili diğer protokoller aracılığı ile iletişim kuran uygulamalar yazmanızı sağlar. Soketleri kullanarak, bağlantı üzerinden, nasıl bir network yapısının varolduğu hakkında herhangi bir endişeye kapılmadan diğer makinalarile haberleşmek mümkündür.

TServerSocket ve TClientSocket bileşenleri ile TcpClient, TcpServer ve TudpSocket bileşenleri Delphi bileşen araç çubuğunun Internet paletinde yer almaktadır.

Belirli bir network üzerinde özel bir servise nasıl ulaşılır

En basit cevap; Client makine servise mesaj göndermek için izine sahiptir ve gönderimden sonra karşıdan cevap bekler. Bir network de bunu yapmanın (gönderme veya okuma) en pratik yolu soketleri kullanmaktır.

Porlar ve Hostlar

Bir soket bağlantısı için, soket bileşeni kullanılır. Host ve port belirli yapılara sahiptir. Genelde host, server sisteminin IP adresi için bir takma ad belirtir (Alias). Port ise, server soket bağlantı numarısı olan ID yi belirtir.

Basit bir TEK-YÖN gönderim yapan program

Şimdi bu uygulamayı Socket bileşenlerini kullanarak nasıl yaptığımıza bir bakalım. İki form oluşturacağız. Birisi SERVER için diğeri CLIENT bilgisayarımız için olacak. Amacımız; Client makinadan TEXT yazısını SERVER makinamıza göndermek olacak.

Başlamadan once, Delphi'yi 2 kez çalıştırın. Bir projeyi Client uygulama için diğerinide Server uygulama için kullanacağız.

SERVER tarafı

Formumuzun üzerinde bir tane TServerSocket bileşeni ve bir tane de Tmemo bileşeni koyunuz. Görünümümüz şu şekilde olacaktır:

Ve formumuzun OnCreate olayını aşağıdaki şekilde oluşturunuz:

procedure TForm1.FormCreate(Sender: TObject);

 

begin

 

  ServerSocket1.Port := 23; //port numaramız

 

  ServerSocket1.Active := True; //soketimizi aktif yaptık

 

end;

formumuzun OnClose olayınıda aşağıdaki hale çeviriniz: 

procedure TForm1.FormClose

 

(Sender: TObject; var Action: TCloseAction);

 

begin

 

  ServerSocket1.Active := false; //Aktifliğini iptal ediyoruz.

 

end;

CLIENT tarafı

Client uygulamamız için, bir tane TClientSocket, bir tane Tedit ve bir tanede Tbutton bileşenini formumuza ekleyelim. Formumuz aşağıdaki gibi görünecektir:

Bu formumuzun da kodlarını aşağıdaki şekilde oluşturalım:

procedure TForm1.FormCreate(Sender: TObject);

 

begin

 

  ClientSocket1.Port :=  23;

 

  ClientSocket1.Host :=  '10.9.5.1';  //Bölgesel TCP/IP server adresi

 

  ClientSocket1.Active :=  true; //Soketimizi aktif yaptık

 

end;

 

 

 

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

 

begin

 

  ClientSocket1.Active := false; //Soketimizi pasif yaptık

 

end;

 

 

 

procedure TForm1.Button1Click(Sender: TObject);

 

begin

 

  if ClientSocket1.Active then //Eğer soketimiz aktif ise

 

    ClientSocket1.Socket.SendText(Edit1.Text); //Edit ın içeriğini gönderiyoruz

 

end;

 

 


Zaten kod kendini çok basit bir şekilde ifade ediyor. Client tarafından butonumuza basıldığında Edit1'in içeriğindeki Text ifade, belirlenmiş port ve host adresi ile Server'ımıza gönderilecektir.

SERVER'a geri dönelim

Bu örnek için son uygulamamız şu olcak: Server'a veri gönderen Client'ları görelim. Bunun için OnClientRead olayını kullanacaz. Bu olay Server soketi Client'tan bir veri okuduğu anda gerçekleşecektir.


Bu kodumuzda (Server formumuzda) şu şekilde olacaktır:

procedure Tform1.ServerSocket1ClientRead(Sender: TObject;

 

  Socket: TCustomWinSocket);

 

begin

 

  Memo1.Lines.Add(Socket.ReceiveText);

 

end;

Kolaydı değil mi J Elbette! Ama programımız sağlıklı çalışmayacaktır. Çünkü birden fazla Client makina Server'a veri göndermeye kalkarsa ne olcak? Bu durumda kodumuzda ufak tefek bir kaç değişiklik işimizi görecektir:

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;

 

  Socket: TCustomWinSocket);

 

var

 

  i:integer;  //Client makina sayısı için

 

  text : string; //Gelen veriyi okumak için

 

begin

 

  for i := 0 to ServerSocket1.Socket.ActiveConnections-1 do

 

  begin

 

    with ServerSocket1.Socket.Connections[i] do

 

    begin

 

      text := ReceiveText; //okunan veri sRec' e atanır.

 

      if text <> '' then //eğer text boş değil ise

 

      begin

 

        Memo1.Lines.Add(RemoteAddress + ' sends :'; //Gönderenin adresi

 

        Memo1.Lines.Add(text); //ve gönderdiği Text Memo'ya eklenir.

 

      end;

 

    end;

 

  end;

 

end;

Hepsi bu. Server bir Client soketten bir veri okuduğunda, Client'ın adresini ve göndermiş olduğu veriyi Memo bileşenine ekler. Memo'muzunda görünümü aşağıdaki gibi olacaktır.


NOT: Eğer ilk olarak Client formunu çalıştırırsanız, daha server ile bağlantı kurulmadığından bir hata ile karşılaşabilirsiniz. Bunun için öncelikle Server Formunu ardından da Client formunu çalıştırmanız gerekmektedir. (Bu uygulama için)


211 Kere okundu

Bu makaleyi beyendinizmi ?

1 2 3 4 5 Rating: 5.00Rating: 5.00Rating: 5.00Rating: 5.00Rating: 5.00 (Toplam 2 Oylar)
comment Yanıtlar (1 Gönder)
  • image Makalemi yayınladığınız için teşekkür ederim fakat makaleyi kopyalayıp yapıştırırken, yazar hakkında ki bilgiyide kopyalasaydınız, makalem yazarsız kalmazdı. Üzüldüm doğrusu...
    (Gönder Mustafa Kutlu, Temmuz 12, 2008, 2:18 PM)
Çok okunanlar
En Çok Yorumlananlar
Yazarlar