VBasic ve Winsock Nesnesi (Ağ)
Bir Ağda Birden Fazla Kişiyle İletişim Kurma Yontemi

Oncelikle konuya winsock ile nasıl bağlantı kurulduğunu bildiğinizi varsa***** devam ediyorum.
Şimdi makalemizde 2 adet winsock kullanımından bahsedeceğim fakat bu winsock un 1’i indexli(daha sonradan yeni bir winsock oluşturmak icin) diğeri ise normal bi winsock olacak.
Şimdi oncelikle 1. winsock umuz (index li) bu winsock umuza tıkla***** index ozelliğine bir 0 yazıyoruz. Daha sonra bir adet daha winsock ekliyoruz. Ben kendim yaparken bu winsock un ismini tepki olarak değiştirdim. Bunları ekledik şimdi ne işe yarıyacağından soz edeceğim.
Tepki olarak adlandırdığım Winsock nesnesi surekli dinleme modunda olacak yani Winsock nesnesinde hata veya herhangi bir nedenden dolayı winsock dinleme modundan cıktığı zaman tekrar dinleme moduna girmesi lazım. Daha sonradan birisi bizden bilgisarımızla iletişim kurmak uzere bağlandığı zaman direk tepki isimli winsock ile iletişim kursun ve bize listemize eklemek isteyip istemediğimizi sorsun. Yani şoyle diyebiliriz MSN messenger kullanan arkadaşlarım bilir biri bizle iletişim kurmaya calıştığı zaman once bize onay ile ilgili bir pencere gelir onaylıyorsak o kişi ile başka bir bağlantı kurulur.
MSN messengerin mantığı tamamen şudur.
Onaylama icin başka bir bağlantı nesnesi gorevlidir. Ve bu bağlantı nesnesinin adresi sabittir. Yani şoyleki sizin her msn listenizdeki bir kişi icin bir winsock gorevlendirilmiş ve bu winsock nesnesi o kişi ile sabit orantılı. Siz oturum acmaya kalktığınız zaman otamatik olarak sizin ip adresiniz ve boş olan port numaranız MSN messenger in kurulu olduğu ana server a bildiriliyor. Ve listelerinizdeki kişilerin size bağlanma ip leri ve portları otamatik olarak değişiyor. Şimdi bazı arkadaşlarımız diyecek bunu nasıl bu kadar cabuk yapıyor ? Aslında cabukluktan ziyade şu eğer farkeden arkadaşlarımız varsa msn e bağlandıktan sonra msn yaklaşık 5 saniye veya bazılarına gore bu 7 8 saniye surecinde bir bekliyor işte bu bekleme suresinde MSN ip ve port adresini otamatik olarak diğer yerlere dağatım yapıyor. Arkadaşlar MSN in calışma mantığı tamamen bu.
Şimdi ise bizim kendi projemize donelim.
- Bizim mantığımız daha başka bir surec icinde calışacak fakat MSN ’ e yakın bir mantık kullanacağız.
Şimdi Bağlantı ile gorevli (0) indexli winsock umuz bizim sabit. Neden sabit diye soracak olrsanız biz bu (0) indexli winsock umuz ile Tepki nesnesi arasında istek icin bağlantı kuracağız.
Evet daha sonra istek icin (0) index li winsock umuz devreye giriyor. Arkadaşımızın ağ ismi veya ip adresi ile istek gonderiyoruz. Yanlız şunu belirteyim winsock(0) ile tepki isimli winsock umuz aynı Port adresi uzerinden birbirlerine bağlanacaktır. Bu yuzden sakın winsock(0) ile tepki isimli winsock nesnesinin Port numaralarını farklı yapmayın.
Şimdi winsock(0)’a istek bağlantısı icin yazacağımız kod şoyle :
Winsock(0).Connect ip_adresi,port_numarasi
Daha sonra karşı tarafın tepki isimli winsock nesnesi aktif hale geliyor onun Connection Request olayına da şu kodu yazacağız.
cevap = Msgbox "Karşı taraf bağlanmak icin onay istiyor. Onaylıyormusunuz ?",vbyesno
if cevap=vbyes then tepki.accept requestID
eğer cevap a donen değer vbyes (yani evetse) bağlantı sağlanacak eğer değilse bağlantı onaylanmayacak.
Sonra tepki nesnesi burda gorevini başka bir winsock a devir yapacak bu işlem cok basit olacak. Bağlantı tamamlandığı takdirde yani tepki isimli winsock’un Connect olayına veri gonderme yontemi ile IP ve onun icin ayırdığınız ozel port numarasını gondereceksiniz.
Daha sonra hemen program yeni bir Winsock uretecek ve karşı tarafa gonderdiği port numarasını yeni actığı winsock ile eşdeğer yaparak winsock nesnesini dinlemeye alacak. Daha sonra karşı tarafın yapacağı tek işe ise gonderilen ip ve port numarası ile port acılan bilgisayara bağlanacak. Yalnız karşı taraf yeni bir winsock actı aynı şekilde siz de yeni bir winsock acıp onu bağlanma icin denemeye başlatacaksınız. Bağlandığı zamansa artık gerisi sizin işlem becerinize kalmış ister her kişi icin veri tabanınızda kayıt turarak her seferinde ip adresi girmek yerine veri tabanınıza kaydettiğiniz bilgiler doğrultusunda bağlanmaya calışabilirsiniz.
__________________