Delphi Ile Network Uzerinden Veri İletimi
Delphi0 Mesaj
●56 Görüntüleme
- ReadBull.net
- Programlama ve Yazılım
- Programlama Dilleri
- Delphi
- Delphi Ile Network Uzerinden Veri İletimi
-
26-09-2019, 08:16:45Delphi 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 TCP/IP 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 TCP/IP 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) __________________