delphi TIdTCPServer TIdTCPclient kullanımı soru.

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
tosturan
Üye
Mesajlar: 17
Kayıt: 02 Eki 2015 09:42

delphi TIdTCPServer TIdTCPclient kullanımı soru.

Mesaj gönderen tosturan »

Herkeze merhabalar.

7 yıldır delphi ile oracle veri tabanı kullanarak proje geliştiriyorum. fakat bu socket kullanmaya işim düştü. beceremedim.

yapmak istediğimi açıklıyım. bir sunucuda çalışan server exesi mevcut. ve buna ip si ile baglanıcak clientlerim olucak. baglanan client baglandıgını bildirip. server exesinden aktif durum ile bilgiler alıcak ve clientin üzerinde bunları sembolik olarak gostericek. kullanıcı client üzerinden istediği zaman bir değer göndericek server bunu karşılıyıp işliycek geri dönüş yapıcak veya yapmıcak.

belki biraz karışık oldu ama birde şunu anlatıyım. ben client den servera baglanma işini hallettim. sonra FIndyClient.Socket.WriteLn('IlkBaglanti') diye gonderip exenin üzerinden bunu karşıladığımda biliyorumki bir client bağlandı. ve eğer socketten gelen değer ='IlkBaglanti' ise cliente AContext.Connection.Socket.WriteLn(aktifBaglantilar) ile geri değer döndürüyorum. mesela server uzerındeki page controlde kactane pagecontrolvar değerini gönderiyorum. clientten bu değeri alıp pagecontrol nesnesine design time da o kadar page olusturuyorum.

sonra clientteki page control change oldukca tekrar FIndyClient.Socket.WriteLn('Page-'+IntToStr(id)) diye hangı pageye gectıgımı gonderiyorum. server üzeinden de gelen değeri şu şekilde kontrol ediyorum if Copy(recv,1,5) = 'Page-' then id := Copy(recv,6,length(recv)-5) diyerek kacıncı pagenın numarasını clientin gonderdiğini tespit ediyorum. ve bu sayfayı server uzerındekı pagecontrol nesnesinden aktif ettiriyorum.


bunları yaptım ama bence mantıkta bir yanlıslık var bu socket haberleşmesi bu şekilde değil gibime geldi. çünki bu pageyi bir kere değiştirdikten sonra yapmak istediğim bir kerelik oluyor daha sonra exenin ramde kapladıgı alan çoğalıyor 600 700 mb a kadar çıkıyor ve gelen komutu işliycek kadar buyuk yer yok gibi bir hata veriyor. sonrasında zaten socket hataları access violationlar felan geliyor.

bu konuda tecrübeli arkadaşlar varsa bana yardımcı olabilirmi bu socket nasıl kullanılır client ve server arasında nası sağlıklı bir haberleşme sağlanılabilinir. döküman , örnek proje ne olursa çok sevinirim. teşekkürler
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: delphi TIdTCPServer TIdTCPclient kullanımı soru.

Mesaj gönderen thelvaci »

Client ile Server'ı birbirine bağlayabilip veri gönderip alabildiğinize göre, socket ile ilgili bir sorununuz yok demektir. Bana kalırsa sorununuz; uygulama için kurduğunuz mantıkta ve uygulamanın hafıza kullanımı giderek artıyor ise; create ettiğiniz nesneleri free etmiyor, hafızada ayırdığınız tahsisatı serbest bırakmıyorsunuz demektir. Sorunu socket'de değil başka yerlerde aramalısınız sanıyorum. Uygulama geliştirme anında her zaman ReportMemoryLeaksOnShutdown özelliğiniz açık olsun ne kadar minik leak'lerde olsa hepsini temizlemeye çalışın. Warning'leri dikkate alın, mümkün mertebe try..finally..end; bloklarını kullanıp finally kısmında dinamik oluşturduğunuz nesnelerinizi, tahsisatlarınızı boşaltın ve asla try..except..end; bloklarında exception'ları gizlemeyin.
Kullanıcı avatarı
G.Arkas
Üye
Mesajlar: 829
Kayıt: 01 Eki 2007 07:16
Konum: İstanbul
İletişim:

Re: delphi TIdTCPServer TIdTCPclient kullanımı soru.

Mesaj gönderen G.Arkas »

Tuğrul hocama %100 katılmakla beraber, senin için küçük bir örnek hazırladım. Elimin altında Delphi7 vardı. :D (Yadigar) Senin için bir başlangıç noktası olacaktır. Temel seviyede socket bağlantı işlemi ve veri gönderimi için işini görecektir.

Resim
test.rar
Örnek socket veri iletimi ve page control active page sync.
(186.11 KiB) 103 kere indirildi
Resim
tosturan
Üye
Mesajlar: 17
Kayıt: 02 Eki 2015 09:42

Re: delphi TIdTCPServer TIdTCPclient kullanımı soru.

Mesaj gönderen tosturan »

Cevaplarınız için teşekkür ederim. bahsettiğiniz hususlara program içerisinde dikkat ediyorum. rami doldurma tarafı server exesinde oluşuyor benim dinamik nesneleri create ettiğim yer client üzerinde. sanki socket kullanım mantığında bir yanlışlık var gibime geldi. ama onun cevabınıda G.Arkas ın verdiği örnekte bulacağıma inanıyorum inceliycem hemen. teşekkürler tekrardan :)
tosturan
Üye
Mesajlar: 17
Kayıt: 02 Eki 2015 09:42

Re: delphi TIdTCPServer TIdTCPclient kullanımı soru.

Mesaj gönderen tosturan »

Kullandığım yapıda bu şekilde bir önad ve seperatorle değeri birleştirip gönderiyorum server tarafındada bunu parse edip değeri kullanıyorum. başka bi yerlerde problemim var bakıcam artık yapıcak bişey yok teşekkür ederim ilgilendiğiniz için.
Cevapla