'Winsock ile Port Dinleme(ya da server) Programı Oluşturmak

'Bunun icin 3 tane Textbox text1in multiline ozelliği true olmalı
'text2 gondereceğimiz mesaj icin,text3 ise dinlenecek port,1 .Label winsock durumu icin
'3 tane de commandbutton 1 tane de winsock durmunu kontrol edicek timer(interval=100 enabled=true olmalı)

Private Sub Command1_Click()
Select Case Winsock1.State 'Winsock durumuna gore işlemi yapıcaz
'Winsock stata 0-7 arasında değerler alır.Bunları Timer1 de acıkladım


Case "0": ' Winsock kapalı ise
Winsock1.LocalPort = Text3.Text
Winsock1.Listen
Text1.Text = Text1.Text & Text3.Text & " Numaralı Port Dinleniyor." & vbCrLf

Case "2": 'Winsock Bağlantı Bekliyorsa
MsgBox "Zaten " & Text3.Text & " Numaralı Port Dinleniyor", vbCritical, "Hata"

Case "7": 'Bağlantı varsa
MsgBox "Aktif Bir Bağlantı Var", vbInformation, "Hata"

End Select
End Sub

Private Sub Command2_Click()
Winsock1.Close ' Winsock Kapattık
Text1.Text = Text1.Text & "Dinleme İptal Edildi" & vbCrLf
End Sub

Private Sub Command3_Click()
If Winsock1.State = 7 Then 'burada da bağlantı olup olmadığını kontrol ediyoruz

Dim cevap 'Burada bağlantıyı kesip kesemem durmunda bir soru soruyoruz
cevap = MsgBox("Aktif Bağlantıyı Kesmek İstediğinizden Emin Misiniz?", vbInformation + vbYesNo, "?")

If cevap = vbYes Then 'Eğer cevap evetse bağlantı kesilir.
Winsock1.Close
End If
End If
End Sub

Private Sub Text2_KeyPress(KeyAscii As Integer)
'Bağlantı Kurulu iken karşı tarafa mesaj gondermek icin text2 'ye mesaj yazıp
'entera basınca mesaj gidicek bunu icin once bağlı olup olmadığımızı kontrol edicez
If Winsock1.State = 7 Then
If KeyAscii = 13 Then 'basılan tuş enter ise
Winsock1.SendData Text2.Text 'text2'yi gonder
Text2.Text = "" 'text2yi temizledik


End If
End If
End Sub

Private Sub Timer1_Timer()
'winsock durumunu anlamak icin

Select Case Winsock1.State
Case "0": Label1.Caption = "Kapalı"
Case "1": Label1.Caption = "Acık"
Case "2": Label1.Caption = "Bağlantı bekleniyor"
Case "7": Label1.Caption = "Bağlı"
Case "9": Label1.Caption = "Hata!"
Case "8": Label1.Caption = "Bağlantı Kesildi"
'bağlantı kesildiğinde tekrar dinlemeye başlamak icin
Winsock1.Close
Winsock1.LocalPort = Text3.Text
Winsock1.Listen


End Select

End Sub

Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
'bir bağlantı isteği geldiğinde once winsocku kapatıcaz ardından bağlantıyı kabul edicez
Winsock1.Close
Winsock1.Accept (requestID)
Text1.Text = Text1.Text & "Bağlantı İsteği:" & Winsock1.RemoteHostIP & ":" & Winsock1.RemotePort & vbCrLf
'yukarıdaki satır text1'e bir bağlantı isteği geldiğini ve bunun hangi ip den ve hangi portundan olduğunu bildiriyor.

'Eğer bağlantı kurulur kurulmaz bir mesaj gondermek isterseniz
'formunuza bir tane daha textbox ekleyin(diyelim adı text5) ardından:

'Winsock1.SendData text5.Text bağlantı kurlulduğunda karşı tarafa text5 iceriği gidecektir.

End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim mesaj As String 'gelen mesajı string olarak tanımlamazsak duzun alamayız


Winsock1.GetData mesaj 'mesajı aldık
'Burada karşıdan gelen komutlara gore orneğin basit bir server oluşturcaz bu noktada'case devereye girmeli


Select Case mesaj

Case "KAPAT": Unload Me 'karşıdan gelen mesaj KAPAT ise program kapanacak
Case "KES": Winsock1.Close 'gelen mesaj KES ise bağlantı kesilecek


'harflerin buyuk/kucuk onemi VAR!
'bunu boyle arttırabilirsiniz.if kullanmaktansa case kullanmak hem daha kolay hem de basit
'bu şekilde istediğiniz şekilde devam edebilirsiniz.
Case Else
Text1.Text = Text1.Text & mesaj & vbCrLf 'mesajı text1'e gonderdik

'eğer bu satırı case else satırından once kullanırsanız case ile tanımladığnız
'komutlar text1 de gorunur.

End Select
End Sub

Private Sub Winsock1_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)
'bir hata cıktığında
Winsock1.Close
Text1.Text = Text1.Text & "Hata Oluştu: " & Description & vbCrLf 'text1'e hatayı gonderdik

End Sub


Private Sub Text1_Change()
Text1.SelStart = Len(Text1.Text) 'bununla mesaj geldi mi en son kalan yerinden devam
'edicek biz de scroll bar ile surekli aşağı inmek zorunda kalmayacağız.

End Sub

__________________