Eylül 10th, 2009Visual Basic 6 internet kontrolleri
Visualbasic’de belli başlı internet kontrollerini sayarsak winsock ve inet’dir.Şimdi winsock dilimiz dondugunce anlatalım..Hemen nesne ozellikleri için object browser’dan kopya çekelim :).Object browser nerde derseniz? F2 tuşuna basarsak görebilirsiniz.İlgli componenti eklemeniz gerektigini söylemicem ;).Burada belli başlı özellikleri yazıcam.Geri kalanı deneme ile öğrenebilirsiniz.

BytesReceived:Giden verinin byte cinsinden degeri
İndex:Sıra numarası
LocalHostName:Bilgisayarınızın ağ üstendeki adı
LocalIp:Bilgisayarınızın ağ üstündeki İp adresi
LocalPort: Sizin makinenizde iletişim için açılacak port numarası.(1000’in üstünde seçin bunun altındakileri işletim sistemi kullanır 655535’te port var zaten )
Name:Nesnenin ismi
Protocol: Tcp/Udp baglantı seçimi.(tcp-udp nedir derseniz bir google amacaya yazın ).Sayısal olarak 0 Tcp,1 Udp yi temsil eder.
RemoteHost:Bağlanılacak makinenin ip adresi
RemotePort: Bağlantı kurulucak makinede açılacak port
State:Nesnenin durumu

Birazdan ufak bir chat programı yazıcaz bunları orada açıklarız.
GetData:Gönderilen veriyi alır
SendData:Veri gönderir
Listen:İlgli porta gelen istekleri dinlemeye başlar.
Birde olaylar var tabi ki;

Yukardan aşağı doğru açıklarsak
Close:Bağlantı koparsa bu olay meydana gelir
Connect:Bağlantı sağlandığında meydana gelir
ConnectRequest:Bir bağlantı istegi geldiginde bu olay olur.Kabul edilecekse Accept metodu ile bu bildirilmelidir.Buda State ile öğrenilir.
DataArrival:Bağlnatı kurulan makineden bir veri geldiginde meydana gelir.
Error:Bağlantıda bir hata oluştuğunda meyadana gelir
SendComplete:Veri gönderme işlemi tamamlandı.
SendProgress:Veri gönderme işlemi devam ediyor.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | '--------------------------------------------------------------------------------- 'Name:Client 'Copyright:open source 'Author:by hasan 'Description:Basit bir chat prgoramı winsock örneği '--------------------------------------------------------------------------------- Private Sub cmdBaglan_Click() 'bu kısmı winsock properties kısmındanda ayarlayabilirsiniz Dim txtIp, txtPort On Error GoTo hata data.Close 'Ne olur ne olmaz bir aç-kapa yapak :D data.RemoteHost = data.LocalIP ' ip adresini al data.RemotePort = 12345 'port'u al data.Connect 'sonrada baglan cmdBaglan.Caption = "Bağlanıyor" cmdBaglan.Enabled = False 'fazla tuşa basmasınlar :D Exit Sub hata: MsgBox "Hata:" & Err.Description, vbInformation data.Close 'madem hata war kapa baglantıyı End Sub Private Sub cmdGonder_Click() 'msj gönder On Error GoTo hata data.SendData txtChat 'hımm bakın ne var sendData bununlada veri yolluyoz txtDialog = txtDialog & "Ben: " & txtChat & vbCrLf txtChat = "" Exit Sub hata: MsgBox "Hata : " & Err.Description data.Close End Sub Private Sub data_ConnectionRequest(ByVal requestID As Long) 'bağlantı istegi gelmişmi 'once herhangi bir baglantımız varmı kontrol edelim 'warsa kapatalım sonra istegi kabul edelim 'state: Durumları açıklayalım 'sckClosed:kapalı sayısal degeri 0 'sckOpen:açık sayısal degeri 1 'sckListening:dinlemede sayısal degeri 2 'sckResolving:Adres çözümlemesi sayısal degeri 3 'sckHostResolved:Çözülen adres sayısal degeri 4 'sckConnecting: baglantı yapılıyor 'sckConnected: bağlantı gerçekleşti 'sckClosing:Server bağlantıyı kapattı 'sckError:Bağlatıda hata oluştu If data.State <> 0 Then ' baglantı varmı kontrol et data.Close 'Varsa kapat data.Accept requestID 'gelen istegi kabul et End If End Sub Private Sub data_DataArrival(ByVal bytesTotal As Long) Dim gelenveri As String data.GetData gelenveri, vbString txtDialog = txtDialog & "Misafir:" & gelenveri & vbCrLf End Sub Private Sub Data_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean) txtDialog.Text = "hata oluştu:" & Description & vbCrLf End Sub Private Sub Form_Load() txtPort.Text = "12345" ' portu yazdıralım txtIp.Text = data.LocalIP ' İp yi yazdıralım End Sub Private Sub Timer1_timer() 'bu kısımda serverda bahsettigim gibi winsock'un durum kontrolu için If data.State = 8 Then 'Karşı taraf baglantıyı kopardı MsgBox "Misafir gitti", vbInformation, "Bilgi" data.Close cmdBaglan.Caption = "Baglan" cmdBaglan.Enabled = True End If If data.State = 9 Then 'hata oluştu MsgBox "Bağlantı koptu!", vbInformation, "Bilgi" data.Close cmdBaglan.Caption = "Baglan" cmdBaglan.Enabled = True End If End Sub |
Şimdi birde server kısımını yazalım ;)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | Option Explicit '--------------------------------------------------------------------------------- 'Name:Server 'Copyright:open source 'Author:by hasan 'Description:Server kısmı '--------------------------------------------------------------------------------- Private Sub cmdBaslat_Click() 'Sunucuyu başlat tuşu On Error GoTo hata data2.Close 'arkadaslar herzaman winsock'u önce kapayın sonra açın ilginç hatalarla 'kaşılaşırsınız benden soylemesi ;) data2.LocalPort = 12345 'açılacak portumuz data2.Listen 'dinlemeye başla txtDialog.Text = "Kullanıcı bekleniyor" cmdBaslat.Caption = "Sunucu başladı" cmdBaslat.Enabled = False Exit Sub ' bizim hocanın bir lafı var açılan sub'ı herzaman kapatın ;) hata: MsgBox "Hata oluştu:" & Err.Description, vbInformation 'hata mesajı End Sub 'eger veri alışverişinde bir hata oluşursa bu kod devreye giricek 'burda number hata numarsını description hata tanımını verio şimdilikl bunları bilmeniz yeterli Private Sub Data_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean) txtDialog.Text = "hata oluştu:" & Description End Sub Private Sub cmdKes_Click() 'baglantıyı kes data2.Close 'Dikkat!!!! hemen winsock'u kapıyoruz bu onemli cmdKes.Caption = "Baglantı kesildi" cmdKes.Enabled = False cmdBaslat.Enabled = True End Sub Private Sub cmdYolla_Click() 'mesaj yolla On Error GoTo hata data2.SendData txtMsj txtDialog = txtDialog & "Ben: " & txtMsj & vbCrLf 'bilmiyenler için vbcrlf bir alt satıra geçmeyi sağlar 'vbCrLf yerine vbnewline' da kullanabilirsiniz maksat alta geçsin 'tabi textbox'ların multiline ozelligini açıyoruz txtMsj = "" Exit Sub hata: MsgBox "Hata oluştu:" & Err.Description, vbInformation End Sub Private Sub cmdCık_click() 'çıkış MsgBox "http://sct.tr.cx", vbInformation, "Güle Güle" End End Sub Private Sub Form_Load() 'burda sorun olmasın diye port bolumune veri girşini kapadım txtPort.Text = 12345 txtPort.Enabled = False End Sub Private Sub Timer1_timer() 'şimdi state durumu degişirse nolcak :D timer ile ne dondugunu hemen kontorl edelim programımız çökmesin dim ;) If data2.State = 8 Then 'karşı taraf baglantıyı kapadı MsgBox "Misafir gitti", vbInformation, "Bilgi" data2.Close cmdBaslat.Enabled = True End If If data2.State = 9 Then 'hata oluşursa MsgBox "Baglantı koptu!", vbInformation, "Bilgi" data2.Close cmdBaslat.Enabled = True End If End Sub 'talepler bolumune geldik karşı taraf konuşalımmı diye istek yollarsa bu kod çalışır Private Sub data2_ConnectionRequest(ByVal requestID As Long) On Error Resume Next If data2.State <> 0 Then data2.Close 'hemen winsock'u kontrol edek kapalımı data2.Accept requestID 'tamamsa istegi alalım hemen beklemesin dimi ;) txtDialog = "Misafir geldi: " & vbCrLf Exit Sub hata: MsgBox "Hata oluştu:" & Err.Description, vbInformation End Sub 'En onemli kısım burası aslında gelen/giden veriyi kontrol ederiz burda Private Sub data2_DataArrival(ByVal bytesTotal As Long) Dim gelen As String data2.GetData gelen, vbString 'getdata ile gelen veriyi çekiyoruz bir kenara :) txtDialog = txtDialog & "Misafir : " & gelen & vbCrLf End Sub Private Sub Data2_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean) txtDialog.Text = "hata oluştu:" & Description & vbCrLf End Sub '------------------------------------------------------------------------------------ 'en önemli kısım port/ip bölumleridir zaten oralarda hata yapmazsanız bir sorun olmaz 'server/client bolumlerinin localport/remoteport bolumleri eşit olmalı dikkat edin 'Şu reverse connect olayınıda açıklayım mantık tamamen ismi gib tersti ;) yazdıgımız 'programın server olan ismini client,client kısmını server yapın :) bu kadar kim 'düşünmüş acaba :-? neyse bize uygulamak düşer ;-) düşünenin beynine sağlı :D 'Arkadaşlar basit bir şey yapmaya çalıştım amacım size winsock'un kullanımını dilim 'dondugu kadar anlatmaktı anlatımda bir kusur bulursanız affedin 'yeterinde açıkladığımı düşünüyorum 'tabiki her programın hataları olur ben rastlamadım sorun bulursanız mail atın 'hasanakgoz@gmail.com ''------------------------------------------------------------------------------------ |