|Refleks|-Oyun,Tasarım,Film,Program,Tek link,İndir
Would you like to react to this message? Create an account in a few clicks or log in to continue.

|Refleks|-Oyun,Tasarım,Film,Program,Tek link,İndir


 
AnasayfaLatest imagesAramaKayıt OlGiriş yap

 

 Delphi Indy Bileşenkeri ile Ağ Programlaması

Aşağa gitmek 
YazarMesaj
serezo
Yönetici
Yönetici
serezo


Ruh Hali : Delphi Indy Bileşenkeri ile Ağ Programlaması Defaul10
Mesaj Sayısı : 952
Rep Puanı : 13489
Teşekkür Aldı : 0
Kayıt tarihi : 29/10/09
Nerden Nerden : Kocaeli/Gebze
İş/Hobiler İş/Hobiler : MEsaj atmak :D
Lakap Lakap : Sezo

Delphi Indy Bileşenkeri ile Ağ Programlaması Empty
MesajKonu: Delphi Indy Bileşenkeri ile Ağ Programlaması   Delphi Indy Bileşenkeri ile Ağ Programlaması EmptySalı Ara. 08, 2009 4:24 pm

Delphi'de yerleşik olarak bulunan indy bileşenleri ile soket programlama konusunu ele alalım.

Bu derste şunları ele alacağız:

* Ağ programları,sunucu ve kullanıcı olmak üzere iki kısımdır.

* Indy bileşenleri ile ağ programlaması yapılabilir.

* İletişim için IdTCPServer ve IdTCPClient bileşenlerinin IP ve Port özellikleri ayarlanır.

* IdThreadMgrDefault bileşeni, sunucuya bağlanan her bir kullanıcı için bir kanal oluşturur.

* IdTcpServer ın OnConnect olayı, IdTCPClient ın Connect komutuyla sunucuya bağlanmasıyla gerçekleştirilecek işlemleri içerir.

* Sunucuya bağlanan her kullanıcı, sunucunun kullandığı TThreadList
nesnesine eklenir.Ve her bağlantıda, kullanıcı bilgileri, TIdPeerThread
nesnesinin Data özelliğine atanır.

* Write ve Read komutlarının farklı formatlarıyla, yazma ve okuma
işlemleri gerçekleştirilir.Sunucu tarafında, TIdPeerThread nesnesininn
Connection sınıfının Write veya Read özellği kullanılır. TIdTCPClient
ın ise, kendi okuma ve yazma fonksiyonları ile işlemler
gerçekleştirilir.

* Bağlantı, IdTCPServer ın Active özellğinin false yapılması veya
kullanıcı tarafında, bağlantının TIdTCPClient ın Disconnect komutuyla
sonlandırılması gibi işlemlerle sonlandırılır.

1. GİRİŞ

Günümüzde kullanılan sistemlerin önemli bir kısmında, yapılan işlemler,
bir noktadan kontrol edilme mantığıyla yürütülmektedir.Üretilen
projeler, genellikle ağa(network) yöneliktir.Bu da ağ programcılığını
öğenmeyi kaçınılmaz kılmaktadır.
Bu nedenle, bu makalede, Delphi'de yerleşik olarak bulunan indy
bileşenleri kullanılarak ağ ortamında programlama konusu işlenecektir.

2. TEMEL BİLGİLER ve ÖRNEK KODLAR

Ağda çalışan uygulamalar, kullanıcı ve sunucu (client/server) olmak üzere iki kısımdan oluşur.
Indy bileşenlerinden, Indy Servers sekmesindeki IdTCPServer, sunucu;
Indy Clients sekmesindeki IdTCPClient ise kullanıcı programında
kullanılır.Indy kanal(thread) problemini kendi içinde çözmüştür.Indy
Misc sekmesindeki IdThreadMgrDefault adlı bileşen ile sunucuya her
bağlanan kullanıcı için ayrı bir kanal oluşturulur ve böylece aynı anda
sunucuya bağlanmaya çalışan kullanıcılar arasında bir çatışma
oluşmaz.Bu bileşen de IdTCPServer ile ThreadMgr özelliğinden
ilişkilendirilir.

Bir sunucu ile kullanıcının etkileşimi için bazı ayarlar yapılmalıdır.Bunlar genellikle formun OnCreate olayında belirtilir.

Yapılması gereken ayarlar:

i. Sunucunun ip özelliğinin,sunucuya bağlanan kullanıcının ip si;
kullanıcının ip özelliğinin de sunucunun ip si olarak ayarlanması,

ii. İletişim için kullanılan port numarasının ayarlanması,

iii. Sunucunun aktif hale getirilmesi.

A. Sunucunun(Server) Özelliklerinin Ayarlanması:

İp ve port un belirlenmesi , IdTCPServer ın Bindings özelliğinde belirtilir.


Bindings := TIdSocketHandles.Create(IdTCPServer);
try
with Bindings.Add do
begin
IP := '127.0.0.1';
Port := 7575;
end;
try
TCPServer.Bindings := Bindings;
TCPServer.Active := True;
except on E:Exception do
ShowMessage(E.Message);
end;
finally Bindings.Free;
end;



Sunucuya bağlanan kullanıcılar,sorunsuz bir kanal modeli için
TThreadList sınıfından türetilen bir nesnede
depolanırlar."KullaniciListesi", TThreadList sınıfının bir örneği
olarak varsayılırsa, yine formun OnCreate olayında aşağıdaki
ayarlamalar gereklidir:


KullaniciListesi := TThreadList.Create;
KullaniciListesi.Duplicates := dupAccept;



Kullanıcılar, bir nesne şeklinde bu "KullaniciListesi" nesnesine
eklenirler. Her bir kullanıcı, sunucuya bağlandığı anda bu listeye
eklenir.Bunun için kullanıcı ile ilgili bilgilerin tutulduğu, bir kayıt
oluşturulup, bu kayıt bir nesne şeklinde "KullaniciListesi" nesnesine
eklenir.Ve bağlantı koptuğunda da listeden çıkarılır.

Bu işlemler için ilgili kodlamalar aşağıdaki gibidir:


type
Kullanici= ^TKullanici;
TKullanici = record
HostName : String[20]; { Hostname }
PeerIP : string[15]; { Kullanıcıt IP adresi}
Thread : Pointer; { Kanala işaretçi(pointer)}
end;

...
procedure Form1.IdTCPServerConnect(Kanal: TIdPeerThread);
var
YeniKullanici: Kullanici;
begin
GetMem(YeniKullanici, SizeOf(TClient));

YeniKullanici.PeerIP := Kanal.Connection.Socket.Binding.PeerIP;
YeniKullanici.HostName := GStack.WSGetHostByAddr(YeniKullanici.PeerIP);
YeniKullanici.Thread := Kanal;

Kanal.Data := TObject(YeniKullanici);

try
KullaniciListesi.LockList.Add(YeniKullanici);
finally
KullaniciListesi.UnlockList;
end;
end;

[code]

B. Kullanıcının(Client) Özelliklerinin Ayarlanması:

İp ve port değerleri, IdTCPClient ın Host ve Port özelliklerine girilir.Ve IdTCPClient ın Connect komutuyla bağlantı sağlanır.

[code]
try
IdTCPClient.Host := '127.0.0.1';
IdTCPClient.Port := 7575;
IdTCPClient.Connect;
except on E: Exception do
ShowMessage( 'Bağlantı Yok');

[code]

Kullanıcının, sunucuya bağlandığında yapılması istenen işlemler ise, IdTCPServer ın OnExecute olayında belirtilir.

Ağ programlarında normalde iletişim kullanıcının sunucuya istek
göndermesiyle başlar.Ve ardışık okuma ve yazma işlemleri ile iletişim
sürdürülür ve sonlandırılır.IdTcpClient ın farklı formatlardaki
yazdırma fonksiyonları ile sunucuya komut gönderilmiş olur. Sunucu ise
IdTCPServer ın uygun formattaki okuma fonksiyonları ile gönderilen
bilgiyi okur.Ve sunucu, gerekliyse doğrulama amaçlı, yeni bir mesaj
gönderir. Bu da kullanıcı tarafından okunur. Ve böylece veri alışverişi
güvenli bir şekilde gerçekleşmiş olur.

Örnek bir iletişim şu şekilde olabilir:

i. Kullanıcı, sunucuya talepte bulunur:

[code]IdTCPClient.WriteLn('Yazdırma İsteği');

ii. Sunucu, kullanıcıdan gelen isteği okur:

gelenistek:=Kanal.Connection.ReadLn;

iii. Okunan komuta bağlı olarak program içinde gerekli işlemler yapılır.

iv. İşlemlerin yapıldığı kullanıcıya bildirilir:

Kanal.Connection.WriteLn('İşlem Tamam.');

v. Kullanıcı işlem sonucunu okur ve böylece doğrulama tamamlanmış olur:

IdTCPClient.ReadLn;

Kullanıcı istek göndermeyi formun OnShow olayı,buton tıklaması gibi bir
olayla başlatabilir. Sunucuda bu işlemler IdTCPServer ın OnExeceute
olayında gerçekleştirilir.

Kodlaması aşağıdaki gibi olabilir:


procedure TMainFormServer.TCPServerExecute(Kanal: TIdPeerThread);
var
Client: Kullanıcı;
IstekTalebi: string;
begin

if not Kanal.Terminated and Kanal.Connection.Connected then
begin
Client := Kullanici(Kanal.Data);
IstekTalebi := Kanal.Connection.ReadLn;

if IstekTalebi = 'Yazdırma İsteği' then
begin
...
end;
Kanal.Connection.WriteLn('İşlem Tamam.');
end;
end;

Bağlantının sonlandırılması ile ilgili kodlamalar da, genellikle formun OnClose olayında belirtilir.
Buradaki kodlamalar aşağıdaki gibi olabilir:

Sunucu Tarafı:


IdTCPServer.Active:=False;
KullaniciListesi.Free;
Kullanıcı Tarafı:
IdTCPClient.Disconnect;
Sayfa başına dön Aşağa gitmek
 
Delphi Indy Bileşenkeri ile Ağ Programlaması
Sayfa başına dön 
1 sayfadaki 1 sayfası
 Similar topics
-
» Delphi'de MD5 Şifreleme
» Delphi'de Yazıcı Etkileşimi
» Delphi'de ListBox Nesnesi
» Delphi'de StringGrid Nesnesi
» Delphi'de Alias Tanımlama

Bu forumun müsaadesi var:Bu forumdaki mesajlara cevap veremezsiniz
|Refleks|-Oyun,Tasarım,Film,Program,Tek link,İndir :: Bilgisayar Dersleri :: Delphi-
Buraya geçin: