S.A.
bugüne kadar hiç tcp/ip işlemleri ile uğraşmadım bu yüzden soracaklarım belki bir çok kişi için kolay ve basit olabilir kusura bakmayın. öncelikle forum içerisinde neredeyse yayınlanan ve verilen tüm lünkleri okudum ve kafam karıştı.
indy bileşeni ile ilgili en dişe dokunur yazıyı http://www.diyezon.com/2007/04/08/indy- ... ogramlama/ adresinden bulup okudum. tcp/ip ile haberleşmenin bir çok yolu ve veri iletişim türü var bunların içerisinden bana en uygun olabilecek ve nasıl kullanılacağına ait toplu bir bilgi bulamadım yada bulduklarımı yapamadım.
biraz başınızı ağrıtmış olabilirim fakat yapmak istediğim özetle
TCP/IP üzerinden çalışan cihazlar var bunlar bazı zamanlarda üzerindeki bilgileri server olarak belirlenmiş bir ip ve porta gönderiyor
ben bu gelen bilgiyi yakalayıp bu gelen bilgiye göre bilginin geldiği ipye cevap vermem gerekiyor.
gelen bilginin ilk ve son karakteri her zaman aynı fakat ortadaki data uzunluğu değişiyor.
bazı durumlarda ise ben hat üzerinde listesi belli olan cihazlar aktif durumda ise bunlara bilgi gönderip onlardan gelen cevaplarıda işlemem lazım.
Böyle bir durumda delphi 2007 içerisindeki hangi componentleri kullanmam gerekiyor ve hangi eventleri ile bilgi okuyup göndermem gerekiyor.
yardımlarınızı rica ederim.
TCP/IP componentleri kullanımı konusunda yardım
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
- adelphiforumz
- Üye
- Mesajlar: 602
- Kayıt: 01 Nis 2008 05:38
- Konum: İstanbul
TCP/IP componentleri kullanımı konusunda yardım
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
Re: TCP/IP componentleri kullanımı konusunda yardım
Başlangıç için Internet sekmesi altında TServerSocket ve TClientSocket nesnelerini kullanabilirsiniz. İstediğiniz uygulama için yetersiz olacaktır, daha doğrusu bu alanda ilk defa programlama yapacak olduğunuzdan bazı organizasyonları istediğiniz gibi yapamayacaksınız. Ama tekrar ediyorum, başlangıç olarak şiddetle tavsiye etmekteyim...
Öncelikle, TServerSocket ve TClientSocket nesneleri standart olarak non-blocking olarak çalışırlar. Yani siz bu nesneleri projeniz altında bir datamodule'e ya da bir forma yerleştirdiğinizde bileşenlerin çalışacakları thread, projenin main threadi olacaktır ( main process, main thread, worker thread kavramlarını bildiğinizi varsayıyorum ). Bloklamasız olduklarından dolayı Connect, Read, Write gibi metodlarınız ilgili thread'i ( bu durumda main thread'i ) bloklamayacak ve process içerisinde interaktif olarak işlem yapabileceksiniz. Yalnız bu durumda aşılması gereken bazı problemler vardır...
Bir client bir t anında Write ile mesaj gönderdiğinde server tarafında ( ya da server gönderdiğinde client tarafında; ama genellikle server tarafında read durumlarında karşılaşılır
) SocketRead event'ı tetiklenecek ve OnRead metodu altındaki kodlarınız çalışmaya başlayacak. OnRead'e ilk girildiği anda başka bir clienttan ya da aynı clienttan Write ile başka bir mesaj gelmişse yeni bir dallanma ile tekrar SocketRead tetiklenecek ve OnRead koşulacak. Bufferdan okuyacağınız veri ise iki mesajın toplamı olacak. 2. read tamamlandığında ilk read e geri dönüldüğünde buffer boşaldığı için boş bir veri okunmuş olacak. Eğer paslaşmalı bir haberleşme yapıyorsanız bu durum ciddi bir organizasyon sorunu oluşturacak...
Bir diğer durum da mesajın hangi clienttan geldiğini çözümleme aşamasında karşınıza çıkar. Eğer ConnectionIndex lere göre bir organizasyon yapmışsanız, connection index i aldıktan sonra client lardan biri disconnect olursa sahip olduğunuz index in geçersiz kalma durumu var...
Non-blocking'de, bu gibi sorunlar yetmiyormuş gibi, ciddi bir kuyruk organizasyonu, blockingde ise ciddi bir thread organizasyonu kurmanız gerekecektir.
Bütün bunları bahsettiğim TServerSocket ve TClientSocket nesnelerini inceleyerek görebilirsiniz, neyin ne olduğunu daha rahat yakalarsınız, şu an çok havada kaldığının farkındayım, kusura bakmayın...
Temel olarak kullanılan metodlar Connect, Disconnect, Read, Write ve Accept metodlarıdır. Bir bağlantı gerçekleştiğinde OnConnect, bağlantı kabul edildiğinde OnAccept metodları, Write ile mesaj gönderildiğinde karşı tarafta OnRead metodu koşar...
Size tavsiyem, bu nesneleri kullanarak basitçe bir bağlantının kurulmasını ( server ve tek bir client ), karşılıklı mesaj gönderilmesini ve bağlantının sonlandırılmasını non-blocking modda gerçekleştirmeniz. Daha sonra projenizi ilerletmeye çalıştığınızda karşılaştığınız hataları çözüme ulaştırmak için ilgili organizasyon ve gerekirse nesne araştırmasını yaptığınızda konuyu daha rahat anlarsınız.
Socket haberleşme, en karmaşık konulardan biridir... Şimdiden kolaylıklar diliyorum...
Öncelikle, TServerSocket ve TClientSocket nesneleri standart olarak non-blocking olarak çalışırlar. Yani siz bu nesneleri projeniz altında bir datamodule'e ya da bir forma yerleştirdiğinizde bileşenlerin çalışacakları thread, projenin main threadi olacaktır ( main process, main thread, worker thread kavramlarını bildiğinizi varsayıyorum ). Bloklamasız olduklarından dolayı Connect, Read, Write gibi metodlarınız ilgili thread'i ( bu durumda main thread'i ) bloklamayacak ve process içerisinde interaktif olarak işlem yapabileceksiniz. Yalnız bu durumda aşılması gereken bazı problemler vardır...
Bir client bir t anında Write ile mesaj gönderdiğinde server tarafında ( ya da server gönderdiğinde client tarafında; ama genellikle server tarafında read durumlarında karşılaşılır

Bir diğer durum da mesajın hangi clienttan geldiğini çözümleme aşamasında karşınıza çıkar. Eğer ConnectionIndex lere göre bir organizasyon yapmışsanız, connection index i aldıktan sonra client lardan biri disconnect olursa sahip olduğunuz index in geçersiz kalma durumu var...
Non-blocking'de, bu gibi sorunlar yetmiyormuş gibi, ciddi bir kuyruk organizasyonu, blockingde ise ciddi bir thread organizasyonu kurmanız gerekecektir.
Bütün bunları bahsettiğim TServerSocket ve TClientSocket nesnelerini inceleyerek görebilirsiniz, neyin ne olduğunu daha rahat yakalarsınız, şu an çok havada kaldığının farkındayım, kusura bakmayın...
Temel olarak kullanılan metodlar Connect, Disconnect, Read, Write ve Accept metodlarıdır. Bir bağlantı gerçekleştiğinde OnConnect, bağlantı kabul edildiğinde OnAccept metodları, Write ile mesaj gönderildiğinde karşı tarafta OnRead metodu koşar...
Size tavsiyem, bu nesneleri kullanarak basitçe bir bağlantının kurulmasını ( server ve tek bir client ), karşılıklı mesaj gönderilmesini ve bağlantının sonlandırılmasını non-blocking modda gerçekleştirmeniz. Daha sonra projenizi ilerletmeye çalıştığınızda karşılaştığınız hataları çözüme ulaştırmak için ilgili organizasyon ve gerekirse nesne araştırmasını yaptığınızda konuyu daha rahat anlarsınız.
Socket haberleşme, en karmaşık konulardan biridir... Şimdiden kolaylıklar diliyorum...
Re: TCP/IP componentleri kullanımı konusunda yardım
s.a, a.s (tembelce/cimrice)
selamu aleykum / ve aleyna aleykum selam (dosdogru)
___________________________________________________________________
bir eksigi gidermek icin yaziyorum.
baglantilari index'e bagli olarak takip etme zorunlulugu yok. zaten böyle bir sey en büyük hatalardan biri olurdu.
her baglanti icin server da bir socket olusur. olusturulan socketler bir listede tutulursa, daha sonra tetiklenen onread eventinde, mesaji gönderen kisinin kim oldugu tespit edilir ve onun icin reserve edilmis olan buffer'a yazilir.
daha sonra parse edilerek, gerekli islemler yapilir.
indiy bilesenleri multi thread olduklari icin daha cok tutuluyorlar.
eger yapmak istedigin sey, kücük capli ise, tserversocket, tclientsocket tam sana göre.
büyük capli, cok kullanicili, yogun trafikli bir program yazmak istiyorsan, indy'i yada alternatif bir multi thread socket bilesenini secmen gerekiyor.
bu bilgiler senin icin yetersiz.
socketler ile emeklemeyi ögrenmek gerek, daha sonra kosarsin.
önce TServerSocket Chat application seklinde google da bi arat. epey bir kod cikacak karsina...
kolay gelsin...
selamu aleykum / ve aleyna aleykum selam (dosdogru)
___________________________________________________________________
bir eksigi gidermek icin yaziyorum.
baglantilari index'e bagli olarak takip etme zorunlulugu yok. zaten böyle bir sey en büyük hatalardan biri olurdu.
her baglanti icin server da bir socket olusur. olusturulan socketler bir listede tutulursa, daha sonra tetiklenen onread eventinde, mesaji gönderen kisinin kim oldugu tespit edilir ve onun icin reserve edilmis olan buffer'a yazilir.
daha sonra parse edilerek, gerekli islemler yapilir.
indiy bilesenleri multi thread olduklari icin daha cok tutuluyorlar.
eger yapmak istedigin sey, kücük capli ise, tserversocket, tclientsocket tam sana göre.
büyük capli, cok kullanicili, yogun trafikli bir program yazmak istiyorsan, indy'i yada alternatif bir multi thread socket bilesenini secmen gerekiyor.
bu bilgiler senin icin yetersiz.
socketler ile emeklemeyi ögrenmek gerek, daha sonra kosarsin.
önce TServerSocket Chat application seklinde google da bi arat. epey bir kod cikacak karsina...
kolay gelsin...
kıdemsiz üye
Re: TCP/IP componentleri kullanımı konusunda yardım
Elbetteikra yazdı:baglantilari index'e bagli olarak takip etme zorunlulugu yok. zaten böyle bir sey en büyük hatalardan biri olurdu.
her baglanti icin server da bir socket olusur. olusturulan socketler bir listede tutulursa, daha sonra tetiklenen onread eventinde, mesaji gönderen kisinin kim oldugu tespit edilir ve onun icin reserve edilmis olan buffer'a yazilir.
daha sonra parse edilerek, gerekli islemler yapilir.


ikra yazdı:socketler ile emeklemeyi ögrenmek gerek, daha sonra kosarsin.
- adelphiforumz
- Üye
- Mesajlar: 602
- Kayıt: 01 Nis 2008 05:38
- Konum: İstanbul
Re: TCP/IP componentleri kullanımı konusunda yardım
yardımlarınız ve fikirleriniz için teşekkürler
ben yazdıklarınızla basit bir uygulamaya başlıyayım bakalım
anladığım kadarı ile dibi karanlık bir derin kuyuya inmek üzereyiz inşallah sonu hayırlı olur.

ben yazdıklarınızla basit bir uygulamaya başlıyayım bakalım
anladığım kadarı ile dibi karanlık bir derin kuyuya inmek üzereyiz inşallah sonu hayırlı olur.

Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
Re: TCP/IP componentleri kullanımı konusunda yardım
ben socketler üzerine epey bi arastirma yaptim.
cok denemeler yaptim.
sahsim adina söylüyorum, hic bir zaman sonuca varamadim : ))
senin hevesini kirmak istemem ama hakikaten cok genis kapsamli bilgiye sahip olman gerekiyor.
soketlerde gelen ve giden veriler icin havuz olusturmak gerek.
gelenleri gidenleri havuzda biriktirmek, sirasi ile göndermek veyahut sirasi ile gelen bilgileri okuyup isleme tâbi tutmak, band genisligini bloke etmemek icin kota ayarlari yapmak, vs. vs. vs. cok kapsamli seyler.
abicim eger bu isi tam manasi ile cözersen, cok isler basarirsin...
cok denemeler yaptim.
sahsim adina söylüyorum, hic bir zaman sonuca varamadim : ))
senin hevesini kirmak istemem ama hakikaten cok genis kapsamli bilgiye sahip olman gerekiyor.
soketlerde gelen ve giden veriler icin havuz olusturmak gerek.
gelenleri gidenleri havuzda biriktirmek, sirasi ile göndermek veyahut sirasi ile gelen bilgileri okuyup isleme tâbi tutmak, band genisligini bloke etmemek icin kota ayarlari yapmak, vs. vs. vs. cok kapsamli seyler.
abicim eger bu isi tam manasi ile cözersen, cok isler basarirsin...
kıdemsiz üye