server - Client arası transfer

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
onclick_lik
Üye
Mesajlar: 35
Kayıt: 04 Eki 2007 08:06

server - Client arası transfer

Mesaj gönderen onclick_lik »

S.A arkadaşlar..Bu foruma emek veren tüm hocalarımdan Allah razı olsun deyip. forumu siz üstadlarım için kolay benim için zor olan soruyla süslemek istiyorum :)

Ben ağ üzerinde bir çalışacak bir program yapmaktayım.Programa
başlamadan önce 2 hafta kadar gerek bu forumda gerek başka sitelerde cok araştırma yaptım ama bir sonuca ulaşamadım. Server, Client, UDP, Broadcast,Send File,socket, INDY....vb bircok kelime ile arama yaptım.Bulduğum örnekleri inceledim, yazıları okudum ama benim istediğim gibi dökümanlar yok.(Lafı cok uzattım biliyorum :)) Benim yapmak istediğim Server ve Client programlarım olacak Serverden belli bir porttan ağa bir dosya atacam ve o portu dinleyen clientlerin almasını istiyorum.

Delphi 7 kullanmaktayım.INDY'nin TıdUDPserver ve TıdUDPclient bileşenlerini inceledim ama pek birşey beceremedim. http://www.indyproject.org sitesinideki örnekleri dökümanları inceledim..sonuc=0

ICS(Internet Component Suite) compenentinin Wsocket ve WsocketServer bileşenlerine baktım protokol olarak "TCP" ve "UDP"
kullanıyor...Bu bileşenler hakkında da cok araştırma yaptım ne bir bana yarayacak döküman ne de örnek bulabildim..

Kısaca ben broadcast olayını kullanarak Serverden >>acık olan tüm clientlere dosya göndermek istiyorum.
Bana uyan bileşenler bunlar anladığım kadarıyla
INDY>>>TıdUDPserver-TıdUDPClient
ICS>>>>Wsocket-WsocketServer

Bana bu konu hakkında yardım var mı??
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Mesaj gönderen ikutluay »

broadcast işlemi ağı yoran bir sistemdir. çünkü yapısı x -x arası değil x ile bütün ağ arası çalışır paketi herkes alır ve banamı diye bakar değilse çöpe atar.

http://www.rejetto.com adresinde HFS diye kaynak kodu bir uygulama var. web server modunda çalışan bir dosya paylaşım uygulaması. birde çok eskiden bir arkadaşın yazdığı bir dosya transfer uniti var (hdd nin neresinde allah bilir). ama bunlar hep x-x şeklinde. broadcast değil. işimi görür dersen bakayım
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
onclick_lik
Üye
Mesajlar: 35
Kayıt: 04 Eki 2007 08:06

Mesaj gönderen onclick_lik »

Hocam bana broadcast desteği olacak..Ben dosyayı serverden atıyım o an belirlediğim portu dinleyen clientler alsın..
Bu Indy'nin TıdUDP/Server-Client bileşnleri ile ICS(Internet Component Suite) compenentinin Wsocket ve WsocketServer bileşnleri ile hakkında bilginiz varmı??

Ben pek bir döküman bulamadım!!! :( kolay gelsin
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Mesaj gönderen unicorn64 »

udp connectionless bağlantı sağlar ve herkese birden dosya yollama işini pek beceremez. ama string bazlı iletişim sağlayabilirsiniz.

mantık larak şöyle birşey olabilir bence:

udp ile serverdan ağa broadcast mesaj gönderirsiniz. ağda bu mesajı alan clientler tcp olarak bağlanır ve dosyayı alırlar.

şuan sadece bu kadar aklıma gelio. yarın sağlam kafayla tekrar düşünür mesaja devam ederim :)
onclick_lik
Üye
Mesajlar: 35
Kayıt: 04 Eki 2007 08:06

Mesaj gönderen onclick_lik »

udp connectionless bağlantı sağlar ve herkese birden dosya yollama işini pek beceremez. ama string bazlı iletişim sağlayabilirsiniz.

mantık larak şöyle birşey olabilir bence:

udp ile serverdan ağa broadcast mesaj gönderirsiniz. ağda bu mesajı alan clientler tcp olarak bağlanır ve dosyayı alırlar.
O şekilde birşeyler bende düşündüm..Serverden bi mesaj atıp bağlı olan clientlerin ip lerini çekip o ip lere dosya transfer etmek..Ama benim yapmak istedğim işin içine hiç İP girmeyecek..Serverden dosyayı atacam o anda acık olan clientler alsın..
şuan sadece bu kadar aklıma gelio. yarın sağlam kafayla tekrar düşünür mesaja devam ederim
Dört gözle bekliyorum tavsiye ve düşüncelrinizi :)

Yardımlarınız için teşekkürler..Kolay gelsin. Saygılarımla
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Mesaj gönderen unicorn64 »


O şekilde birşeyler bende düşündüm..Serverden bi mesaj atıp bağlı olan clientlerin ip lerini çekip o ip lere dosya transfer etmek..Ama benim yapmak istedğim işin içine hiç İP girmeyecek..Serverden dosyayı atacam o anda acık olan clientler alsın..

ip olmadan ağda işlem mi yapılır? ip den neden kaçınıyorsunuz anlamadım??
onclick_lik
Üye
Mesajlar: 35
Kayıt: 04 Eki 2007 08:06

Mesaj gönderen onclick_lik »

Ben şimdi programı broadcast üzerinden yapcağım için İP olmayacak.Daha doğrusu benden istenen o şekilde serverden ortalığa bir veri atacam acık olan clientler alcak.İp olsa benim işim cok rahat olur ama ip istenmiyor!!!

Benim düşüncem broadcastle sizin dediğiniz gibi string bazlı iletişim yapmak.Zaten programda bağlanan clientlerin İP sini cekebiliyom..Bu İPleri bir listboxta sıralatıp dosya gönderirken sırayla o ip lere göndermek...Bu şekilde olabilir ama program kasarmı kilitlenirmi hiç denemedim??Deneme yapmakda istemiyom istenilen olay broadcast destekli olacağı için...(Yani ısrarla BROADCAST )

ICS(Internet Component Suite) compenentinin socket bileşenleri hakkında bilginiz varmı? O componenti biraz araştırdım Protokol olarak 'TCP' ve 'UDP' kullanıyo..Multithearad ve Multicast desteği var.Ama pek bir bilgim olmadığı için deneyemedim :cry:
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Mesaj gönderen unicorn64 »

şu broadcast olayını biraz daha açalım. veri iletişimi sadece broadcast ten mi olsun isteniyo. yoksa illa broadcast kullanılsın ama veri iletişiminin tamamı broadcast olmak zorunda değil mi? tamam sonuçta ağdaki tüm açık client programlarla broadcast üzerinden haberleşip, ben burdayım hadi dosyayı gönder onayını alıp tcp üzerinden göndermek daha mantıklı çünkü.

programın bir kerelik olduğunu sanmıyorum. broadcast olarak 1 mb dosya bile göndersen ki daha fazla gönderirsin muhtemelen ağı yorarsın. gerek yok yani boşuna kasmaya ağı.

-şimdi server programın padişah olsun :)
-udp ve broadcast mesajın eline davulunu almış tellal. tellal şehrin sokaklarında gezinip bağırıyo:"duyduk duymadık demeyin bu mesajı alan herkese birazdan ücretsiz gıda dağıtımı yapılacak,yapmanız gereken tek şey şehir meydanında adınızı kaydettirmek" diye
-bunu duyan halk koşuyo meydana yaptırıyo kaydını (server a tcp olarak bağlanıyo)
-sonra padişahın görevli adamları (tcp threadler) padişahın isteğine göre paralel yada tüm halkı tek kişilik sıralara sokup gıda dağıtımını yapıyo. bu arada gıda paketi parça parça gelio ve halkın her bir ferdi, ben şu parçayı aldım deyince görevli bir sonraki parçayı verio. (handshake olayı)


bence tüm veriyi broadcast basmaktansa bu tarz bir yapı daha mantıklı. broadcast i ilk başta ağda kimler açık die bakmak için, onlara dosya gelioooo demek için kullanırsın. sonra server da 2 tane de tcp serverin olur. 1i bağlanan clientle string bazlı iletişim için yine.(dosya adı gönderirsin mesela, yada dosyanın şu parçasını aldım sonrasını gönder falan) 2. tcp server da stream,buffer artık nasıl gönderirsen dosyayı göndermek için

---

edit: bu arada ICS yi kullanmadım. şuan işyerindeyim. evdeki pc de kullandığım bi komponent vardı ama adı aklımda değil şimdi forumda daha önce geçmişti, link vardı bende ordan indiğrmiştim zaten. onda dosya gönderme falan baya kolaydı. bi bakın isterseniz

bir de şuraya bakın
viewtopic.php?t=21484&highlight=
onclick_lik
Üye
Mesajlar: 35
Kayıt: 04 Eki 2007 08:06

Mesaj gönderen onclick_lik »

Evet veri iletişimi mesaj herşey Broadcast yöntemi ile olsun isteniliyor.bayaı bir arastırmada bulundum broadcast'in ağı yorduğu, verilerin tam olarak gidip gitmediğini bilemiyosunuz..İp olsa broadcastle aldığım iplere TCP/İP protoklünü kullanarak gönderme yapabilirim ama İp olmayacağı için yapamıyorum.
UDP de broadcastin özel olarak kullandığı adresi '255.255.255.255' kullanabilirim.Bunun dısında başka adres olmayack.

Şimdi sende diyecenki onu kullanmıyacan bunu kullanmıyacan nasıl olacak diyeceksin?? Çözüm bulsam birşeyler yapacam ama ağ üzerinde pek bilgim olmadığı için tıkanıyorum.

viewtopic.php?t=21484&highlight= burada ki bilgilere önceden bakmıştım pek bir işime yaramadı.Yaramadı derken güzel örnekler bileşenler var ama TCP/IP protokolü kullanılmış o yüzden.
ICS sorma nedenm ise pek bir ingilizcem yok http://www.overbyte.be sitesinden anladığım bilgiler kadarıyla birşeyler yapıyorum ama o da benim için yeterli olmuyo :roll:
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Mesaj gönderen unicorn64 »

şuan fırsatım yok kusura bakma. ama şunu söyliim. her zaman 255.255.255.255 olmaz o. ip ve alt ağ maskesine bağlı olarak değişir broadcast adresi.

alt ağ tanımlaması(ağı alt ağlara bölme) yapılmamış standart bir ağda

ip 10 la başlıyorsa 10.255.255.255, 192 ile başlıyorsa 255.255.255.255
şeklinde olur
onclick_lik
Üye
Mesajlar: 35
Kayıt: 04 Eki 2007 08:06

Mesaj gönderen onclick_lik »

Eyvallah üstadım yardımların için..Bu konuyla ilgili yine eline döküman gecerse benimle paylaşırsan sevinirim.Herşey için allah razı olsun.Ben kendi adresime göre o an '255.255.255.255' adresini yazmıştım.

Belki benim gibi yeni arkadaşlara yardımcı olur braodcast ip bulma.


BROADCAST IP BULMA FORMÜLÜ:

diyelimki Anamakinenin Ip adresi 192.168.1.15
192 =1.basamak
168 =2.basamak
1 =3.basamak
15 =4.basamak


Eğer anamakinenin Ip adresinin 1.basamağı;
0 - 127 arası ise bu ağın broadcast ip'si = 1.basamak + 255 + 255 + 255
(örneğin Ip adresiniz 10.0.0.8 ise broadcast Ip= 10.255.255.255)
(örneğin Ip adresiniz 75.77.13.88 ise broadcast Ip= 75.255.255.255)

128 - 191 arası ise bu ağın broadcast ip'si = 1.basamak + 2.basamak + 255 + 255
(örneğin Ip adresiniz 154.72.7.9 ise broadcast Ip= 154.72.255.255)
(örneğin Ip adresiniz 188.42.42.54 ise broadcast Ip= 188.42.255.255)

192 - 223 arası ise bu ağın broadcast ip'si = 1.basamak + 2.basamak + 3.basamak + 255
(örneğin Ip adresiniz 192.168.1.42 ise broadcast Ip=192.168.1.255)
(örneğin Ip adresiniz 199.155.130.88 ise broadcast Ip=199.155.130.255)
Cevapla