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
''------------------------------------------------------------------------------------

Kaynak Kod