arkaşımızın bir tanesi soket uygulaması istemişti bende bir ornek kdo yolluyorum
not : alıntıdır
PHP Code:
//bende yeni yeni delphi ogrenmeye basladim ve buldugum dokumanlari sizlerle
//paylasmak istedim.maalesef tamamen c/p ama onemli olan dokumanlarin artmasi


DELPHİ İLE NETWORK UZERİNDEN VERİ İLETİMİ



Delphi bizlere ağ uzerinden veri iletimini sağlayan bircok nesne sunmaktadır (Internet, intranet, local). Bu makalede 2 Delphi bileşeni uzerinde inceleme yapacağız: TserverSocket ve TclientSocket. Bu iki bileşen TCPIP bağlantıda okuma ve yazma işlemleri icin tasarlanmıştır. Bu makalede ağ uzerinde iletişim kuran basit bir uygulama yapacağız.




Winsock ve Delphi soket bileşenleri



Windows soketleri veya Winsock, Microsoft Windows altında network programlama icin bir acık arayuzdur. Winsock, protokol yığın servislerine ulaşabilmek icin bize bir takım fonksiyonlar, veri yapıları v.b. imkanlar sunar.



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

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



Belirli bir network uzerinde ozel bir servise nasıl ulaşılır

En basit cevap; Client makine servise mesaj gondermek icin izine sahiptir ve gonderimden sonra karşıdan cevap bekler. Bir network de bunu yapmanın (gonderme veya okuma) en pratik yolu soketleri kullanmaktır.



Porlar ve Hostlar

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

Basit bir TEK-YON gonderim yapan program

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

Başlamadan once, Delphi’yi 2 kez calıştırın. Bir projeyi Client uygulama icin diğerinide Server uygulama icin kullanacağız.

SERVER tarafı

Formumuzun uzerinde bir tane TServerSocket bileşeni ve bir tane de Tmemo bileşeni koyunuz. Gorunumumuz ş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 ceviriniz:

procedure TForm1.FormClose

(Sender: TObject; var Action: TCloseAction);

begin

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

end;

CLIENT tarafı

Client uygulamamız icin, bir tane TClientSocket, bir tane Tedit ve bir tanede Tbutton bileşenini formumuza ekleyelim. Formumuz aşağıdaki gibi gorunecektir:



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'; //Bolgesel 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 iceriğini gonderiyoruz

end;





Zaten kod kendini cok basit bir şekilde ifade ediyor. Client tarafından butonumuza basıldığında Edit1’in iceriğindeki Text ifade, belirlenmiş port ve host adresi ile Server’ımıza gonderilecektir.



SERVER’a geri donelim

Bu ornek icin son uygulamamız şu olcak: Server’a veri gonderen Client’ları gorelim. Bunun icin OnClientRead olayını kullanacaz. Bu olay Server soketi Client’tan bir veri okuduğu anda gercekleş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ı calışmayacaktır. Cunku birden fazla Client makina Server’a veri gondermeye kalkarsa ne olcak? Bu durumda kodumuzda ufak tefek bir kac değişiklik işimizi gorecektir:





procedure TForm1.ServerSocket1ClientRead(Sender: TObject;

Socket: TCustomWinSocket);

var

i:integer; //Client makina sayısı icin

text : string; //Gelen veriyi okumak icin

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 :'; //Gonderenin adresi

Memo1.Lines.Add(text); //ve gonderdiği Text Memo’ya eklenir.

end;

end;

end;

end;

Hepsi bu. Server bir Client soketten bir veri okuduğunda, Client’ın adresini ve gondermiş olduğu veriyi Memo bileşenine ekler. Memo’muzunda gorunumu aşağıdaki gibi olacaktır.





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



__________________