BroadCast gibi bir olayla tüm ağdaki açık programıma..
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
BroadCast gibi bir olayla tüm ağdaki açık programıma..
Merhaba,
Şöyle bir ihtiyaç doğdu, özellikle 10-15 kullanıcılı dağınık yerleşim düzenli sistemlerde programımıza bakım yapılacağı zaman tüm kullanıcıların programdan çıkmalarını tek tek iletişim kurup söylemek gerçekten zaman kaybı,ağın tümüne ortalık yere bir mesaj göndererek programımızdan bu mesajı nasıl yakalarız, ama Firewall engeline taklılmayacak türden bir mesaj olmalı bu bende bu mesajı alıp programı kapatacağım.
Kolay gelsin.
Şöyle bir ihtiyaç doğdu, özellikle 10-15 kullanıcılı dağınık yerleşim düzenli sistemlerde programımıza bakım yapılacağı zaman tüm kullanıcıların programdan çıkmalarını tek tek iletişim kurup söylemek gerçekten zaman kaybı,ağın tümüne ortalık yere bir mesaj göndererek programımızdan bu mesajı nasıl yakalarız, ama Firewall engeline taklılmayacak türden bir mesaj olmalı bu bende bu mesajı alıp programı kapatacağım.
Kolay gelsin.
Volkan KAMADAN
www.polisoft.com.tr
www.polisoft.com.tr
Hayır Recep abi, FB kullanmıyorum MySQL kullanıyorum,
Bunu Indy ile portlarla felan halletmem gerekiyor anladığım kadarıyla ama pek tecrübem olmadığı için somut fikirler üretemiyorum.
Bunu Indy ile portlarla felan halletmem gerekiyor anladığım kadarıyla ama pek tecrübem olmadığı için somut fikirler üretemiyorum.
Volkan KAMADAN
www.polisoft.com.tr
www.polisoft.com.tr
Benim de aklıma hemen kolayı geldi
MySQL ve diğer veri tabanlarında da benzer olaylar olmalı diye düşünüyorum. Yani tablodaki kayıt güncellemeyi diğer terminaller nasıl algılıyorlarsa benzer bir tabloda bu iş için bir kayıt ekleyip bu özel kayıt değiştiğinde belli bir süre sonra mesela 1 dk. içinde veri tabanı bağlantısı kapattırılabilir diye düşünüyorum 


Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
hocam server client socketler ile prg dbserver a baglandiginda ayni server üzerinde calisan bir socket e baglansinlar. daha sonra server socket ile o an bagli olan tüm client lere msg at. msg client socketler tarafindan algilandiginda terminate yapsinlar yada kullanicilari uyarsinlar...
belki bir fikir verebilir...
selam ve dua ile...
belki bir fikir verebilir...
selam ve dua ile...
Evet olayın Client-Server ile olması gerektiğini düşünüyorum bende, ancak çok detaylı bilgim yok, fakat şunu söyleyebilirim, mesela Server uygulama bir Terminalin IP sinden ve portundan yola çıkarak bilgi gönderebiliyor ya, ben ise ortalık yere bir bilgi göndermek istiyorum yani terminaller nasıl bir mantıkla Client olarak server ın göndereceği sinyali yakalayacaklar onu çözemedim, bi ara Kapalı makinayı açmak için MACId sini baz alarak tüm ağdaki bilgisayarlara aynı anda bir kaç bytelık bilgiyi BroatCast etmiştik benzer bi şekilde tüm dinleyen Clientlere bilgiyi göndermek istiyorum.
Volkan KAMADAN
www.polisoft.com.tr
www.polisoft.com.tr
hocam selamu aleyküm
olay su:
serversocket active olan connection larin hepsine msg atacak
hocam clientsocket in onread kismina da yani msg geldiginde devreye giren olayda da gelen rakami case ile sorgulatiyoruz
gibi...
umarim yardimci olabilmisim dir...
olay su:
serversocket active olan connection larin hepsine msg atacak
Kod: Tümünü seç
for i := 0 to pred(serversocket1.socket.activeconnections) do
serversocket1.socket.connections[i].sendtext('1');
Kod: Tümünü seç
case rakam of
1 : showmessage('bilgisayarlarinizi kapatin adami hasta etmeyin');
2 : showmessage('bilgisayarlarinizi kapamaya gerek yok zaten sigortalari attiriyorum');
end;
umarim yardimci olabilmisim dir...

En son ikra tarafından 18 Haz 2007 10:32 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Bir ara denemiştim.Server tüm clientleri algılayıp hepsine mesaj gönderiyor. onalrda mesaja göere bazı işler yapıyor. Belki işinizi görür:
http://delphi.about.com/od/networking/l/aa112602a.htm
http://delphi.about.com/od/networking/l/aa112602a.htm
Çok teşekkür ederim hemen deniyorum,
Peki önerdiğiniz bir port numarası varmı hangi porta mesaj göndermeliyim?
Peki önerdiğiniz bir port numarası varmı hangi porta mesaj göndermeliyim?
Volkan KAMADAN
www.polisoft.com.tr
www.polisoft.com.tr
bence kesinlikle 6667 denemeyin. bu chat port u oldugu icin genelde firmalar tarafindan bloke edilmekte. ben 3048 yada 3049 kullaniyorum. simdiye kadar hic bir sorun cikmadi. bu arada eger ki o an bagli pc ler de socket ler ile gösterilsin ve listelensin istiyor isen sockethandle ile bunu yapabilirsin. her bir clientsocket serversocket e baglandiginda kendine has bir sockethandle aliyor.
söyle yapabiliriz.
socket baglandiginda sendtext('1:pc1'); diye bi msg atar. biz de 1 nolu msg geldiginde bunun yeni bir baglanti oldugunu algilayip sockethandle, ip ve pc ismini bi degiskende tutabilir bunlari listeleyebiliriz. serversocket in onclientdisconnect olayinda ise yine sockethandle okuyup bu sockethandle ye ayit olan ismi listeden silebiliriz. hem bu arada acaba server a bagli pc var mi? var ise kac kisi? hemde bire bir yazisma imkani bulabilirsin...
hocam basarilar diliyorum. takildigin bir yer olur ise nacizane yardimci olmaya calisirim...
söyle yapabiliriz.
socket baglandiginda sendtext('1:pc1'); diye bi msg atar. biz de 1 nolu msg geldiginde bunun yeni bir baglanti oldugunu algilayip sockethandle, ip ve pc ismini bi degiskende tutabilir bunlari listeleyebiliriz. serversocket in onclientdisconnect olayinda ise yine sockethandle okuyup bu sockethandle ye ayit olan ismi listeden silebiliriz. hem bu arada acaba server a bagli pc var mi? var ise kac kisi? hemde bire bir yazisma imkani bulabilirsin...
hocam basarilar diliyorum. takildigin bir yer olur ise nacizane yardimci olmaya calisirim...
Evet bir kaç deneme yaptım çok güzel oldu teşekkür ederim,
Ama birkaç sorum olucak,
Örneğin IP no ile dğeilde makina adıyla ServerSocket e bağlantı kurmak mümkün olmadı bunun basit bir yolu varmı, yoksa makina adından IP Adresi bulan ekstra metodlarmı kullanmak gerekir.
Birde şöyle bir durum var, bağlantının sağlanıp sağlanmadığını kontrol edemiyorum Client.Active:=ture diyorum blok işletilmeye devam ediyor yani beklemiyor bağlnana yada hata verene kadar bu kontrolü nasıl sağlarız.
Teşekkürler.
Ama birkaç sorum olucak,
Örneğin IP no ile dğeilde makina adıyla ServerSocket e bağlantı kurmak mümkün olmadı bunun basit bir yolu varmı, yoksa makina adından IP Adresi bulan ekstra metodlarmı kullanmak gerekir.
Birde şöyle bir durum var, bağlantının sağlanıp sağlanmadığını kontrol edemiyorum Client.Active:=ture diyorum blok işletilmeye devam ediyor yani beklemiyor bağlnana yada hata verene kadar bu kontrolü nasıl sağlarız.
Teşekkürler.
Volkan KAMADAN
www.polisoft.com.tr
www.polisoft.com.tr
hocam baglanti kurulamaz ise timeout meydana gelecek tir. haliyle error vermesi gerekiyor. bunu clientsocket in onerror kismindan yakalaman gerek. tam olarak hatirlayamiyorum su an ve bu nedenle de yanlis bilgilendirmek istemiyorum. bir de baglanti kurarken socket.remoteaddres alabiliyorsun bu makinanin client in ip i ve pc ismini örenmek istiyorsan aynen söyle yapabiliriz.
ClientSocket1.OnConnect(Sender: TObject);
Socket.SendText('1:pc_ismi');
simdi biz ServerSocket in onRead inda Copy ile ":" kadar olan kismini alip rakami elde ettik. artik bunu case ile sartlandirabiliriz. ":" dan sonraki kisim pc ismimiz bunu da okutup degiskene atabiliriz yada listeye ekleyebiliriz. bu arada ille de 1 olmak zorunda degil. söyle olabilir
1 : yeni baglanti
2 : ben ayriliyorum (ondisconnect te sentext yapabilir)
3 : msg yazdim broadcast olsun herkese gitsin
4 : msg yazdim yalnizca server görsün
baglanti saglanip saglanilmadigini da söyle kontrol edebiliriz.
ClientSocket.Active := true yerine
ClientSocket.Open diyoruz. daha sonra bagli olup olmadigini da if ClientSocket.Active then diye sartlandirabiliriz. (umarim dogru algilayip dogru cevabi vermisim dir)
ClientType stThreadBlocking, NonBlocking bunlar ne ise yariyor?
eger msg gönderilecek ise NonBlocking kullaniyoruz. eger paket gönderilecek ise stThreadBlocking kullaniyoruz. bu ayarlari ayni sekilde ServerSocket üzerinde de yapmamiz sart.
Sonucu merak ettim. Basarirsan bi yaz lütfen. kendim yapiyormusum gibi heyecanlandim
ClientSocket1.OnConnect(Sender: TObject);
Socket.SendText('1:pc_ismi');
simdi biz ServerSocket in onRead inda Copy ile ":" kadar olan kismini alip rakami elde ettik. artik bunu case ile sartlandirabiliriz. ":" dan sonraki kisim pc ismimiz bunu da okutup degiskene atabiliriz yada listeye ekleyebiliriz. bu arada ille de 1 olmak zorunda degil. söyle olabilir
1 : yeni baglanti
2 : ben ayriliyorum (ondisconnect te sentext yapabilir)
3 : msg yazdim broadcast olsun herkese gitsin
4 : msg yazdim yalnizca server görsün
baglanti saglanip saglanilmadigini da söyle kontrol edebiliriz.
ClientSocket.Active := true yerine
ClientSocket.Open diyoruz. daha sonra bagli olup olmadigini da if ClientSocket.Active then diye sartlandirabiliriz. (umarim dogru algilayip dogru cevabi vermisim dir)
ClientType stThreadBlocking, NonBlocking bunlar ne ise yariyor?
eger msg gönderilecek ise NonBlocking kullaniyoruz. eger paket gönderilecek ise stThreadBlocking kullaniyoruz. bu ayarlari ayni sekilde ServerSocket üzerinde de yapmamiz sart.
Sonucu merak ettim. Basarirsan bi yaz lütfen. kendim yapiyormusum gibi heyecanlandim

Peki şunu sormak istiyorum,
Istemci sunucu şeklinde değilde yani terminallerin bağlandığı bir sunucu uygulama olmadan sürekli bir portu dinleyen bir özellikle ortalığa atılmış bir paketi yakalayamazmıyız, tıpkı bu makinayı ethernetten açma olayı gibi yani birbirlerinden haberleri olmasına gerek yok makinaların sadece ben atyıorum 1238 nolu port için bir mesaj atıcam benim programlarında 1238 için tetikte olucaklar ama herhangi bir TCP server a bağlı olmayacaklar bu mümkünmü?
Istemci sunucu şeklinde değilde yani terminallerin bağlandığı bir sunucu uygulama olmadan sürekli bir portu dinleyen bir özellikle ortalığa atılmış bir paketi yakalayamazmıyız, tıpkı bu makinayı ethernetten açma olayı gibi yani birbirlerinden haberleri olmasına gerek yok makinaların sadece ben atyıorum 1238 nolu port için bir mesaj atıcam benim programlarında 1238 için tetikte olucaklar ama herhangi bir TCP server a bağlı olmayacaklar bu mümkünmü?
Volkan KAMADAN
www.polisoft.com.tr
www.polisoft.com.tr