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)
__________________
Delphide soket uygulamaları
Delphi0 Mesaj
●31 Görüntüleme
- ReadBull.net
- Programlama ve Yazılım
- Programlama Dilleri
- Delphi
- Delphide soket uygulamaları