[TUT]Winsock & VB.NET

11/21/2011 19:08 Jopsi332#1
Ich hab eben mal die sufu benutzt und bemerkt das viele Leute noch probleme mit winsock haben seti vb.NET da dies eigentlic hdafür abgeschafft wurde. So geht es aber tortzdem (1 CLIENT NUR!)
Als erstes machen wir eine Winsock oberfläche auf die neue Form,
wer kein winsock komponente hat macht dies
mswinsock.ocx downloaden

32 BIT -> kopiert die mswinsock.ocx nach C:/Windows/System32/
dann cmd als ADMIN AUSFÜHREN! und regsvr32 mswinsck.ocx, oder wie ihr sie genannt habt eingeben. VS, VB.Net or whatelse neustarten
64 BIT -> kopiiert die mswinsock.ocx nach C:/WINDOWS/WOWSYS64/
dann C:/WINDOWS/WOWSYS64/CMD.exe als Admin ausführen! (nicht über start!!!!) dann wieder regsvr32 mswinsock.ocx und wieder vs bzw vb.net neustarten

dann Projekt -> verweise-> hinzufügen->COM MSwinsock Control 6.0 ein hacken dranne

dann Rechtsklick auf Toolbox->Elemente auswählen-> Com Komponente -> Microsoft Winsock Control, Version 6.0 ein hacken dranne.

ganz unten in allgemein seht ihr es dann in der toolbox.


Diesen zieht ihr dann auf eure Form

So jetzt klatscht ihr noch ne Listbox auf die Form um anzugucken was so an Inhalt ankommt.

Okay das wars zum äußerlichen

Nun zum Code

Als erstes die Listen Funktion damit der Client connecten kann.
Code:
    Public Class main
 Private Sub main_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

           Winsock.LocalPort = 12345
            Winsock.Listen()

End Sub
End Class
So nun wird schonmal eine Verbindung darüber aufgebaut, ihr könnt aber noch keine Empfangenen Daten etc. sehen und VORALLEM werden noch garkeine Client akzeptiert

des halb fügen wir jetz Connection request event ein
Code:
  Public Class main
 Private Sub main_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

           Winsock.LocalPort = 12345
            Winsock.Listen()

End Sub

    Private Sub Winsock_ConnectionRequest(ByVal sender As System.Object, ByVal e As AxMSWinsockLib.DMSWinsockControlEvents_ConnectionRequestEvent) Handles Winsock.ConnectionRequest
        Winsock.Close()
       Winsock.Accept(e.requestID)
    End Sub
End Class
also so


nun wird ein Client akzeptiert, aber wir können immernoch nicht die Daten sehen deshalb nun die Data Arrival Event.

diese sieht folgendermaßen aus

Code:
  Public Class main
 Private Sub main_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

           Winsock.LocalPort = 12345
            Winsock.Listen()

End Sub

    Private Sub Winsock_ConnectionRequest(ByVal sender As System.Object, ByVal e As AxMSWinsockLib.DMSWinsockControlEvents_ConnectionRequestEvent) Handles Winsock.ConnectionRequest
        Winsock.Close()
       Winsock.Accept(e.requestID)
    End Sub
  Private Sub Winsock_DataArrival(ByVal sender As System.Object, ByVal e As AxMSWinsockLib.DMSWinsockControlEvents_DataArrivalEvent) Handles Winsock.DataArrival
Dim data as string
data = winsock.getdata(data)
Listbox1.items.add(data)'so sehen wir was ankommt'
End Sub
End Class
So so weit so gut, aber wenn jetz der client disconnectet müssten wir den server auch neustarten also noch ein connectino close event der den winsock neustartet
also unser code nun
Code:
  Public Class main
 Private Sub main_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

           Winsock.LocalPort = 12345
            Winsock.Listen()

End Sub

    Private Sub Winsock_ConnectionRequest(ByVal sender As System.Object, ByVal e As AxMSWinsockLib.DMSWinsockControlEvents_ConnectionRequestEvent) Handles Winsock.ConnectionRequest
        Winsock.Close()
       Winsock.Accept(e.requestID)
    End Sub
  Private Sub Winsock_DataArrival(ByVal sender As System.Object, ByVal e As AxMSWinsockLib.DMSWinsockControlEvents_DataArrivalEvent) Handles Winsock.DataArrival
Dim data as string
data = winsock.getdata(data)
Listbox1.items.add(data)'so sehen wir was ankommt'
End Sub
    Private Sub winsock_CloseEvent(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles winsock.CloseEvent
        winsock.Close()
        winsock.Listen()

    End Sub
End Class
So würde unser 1 Client Server aussehen, nur noch eine kleine veränderung undzwar das wir die Daten an den Client auch zurück Schicken
Code:
  Public Class main
 Private Sub main_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

           Winsock.LocalPort = 12345
            Winsock.Listen()

End Sub

    Private Sub Winsock_ConnectionRequest(ByVal sender As System.Object, ByVal e As AxMSWinsockLib.DMSWinsockControlEvents_ConnectionRequestEvent) Handles Winsock.ConnectionRequest
        Winsock.Close()
       Winsock.Accept(e.requestID)
    End Sub
  Private Sub Winsock_DataArrival(ByVal sender As System.Object, ByVal e As AxMSWinsockLib.DMSWinsockControlEvents_DataArrivalEvent) Handles Winsock.DataArrival
Dim data as string
data = winsock.getdata(data)
winsock.senddata(data)
Listbox1.items.add(data)'so sehen wir was ankommt'
End Sub
    Private Sub winsock_CloseEvent(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles winsock.CloseEvent
        winsock.Close()
        winsock.Listen()

    End Sub
End Class
Das war der Server

nun ein Simpler client den wir ähnlich aufbauen

Dazu machen wir eine Form mit einer Listbox, einer Textbox und einem Button

Dann wieder ganz am start die Propeties festlegen, nur diesmal auch die IP
Code:
  Public Class main
 Private Sub main_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
          Winsock.RemoteIP = "127.0.0.1"
           Winsock.LocalPort = 12345
            Winsock.Connect()

End Sub
  Private Sub Winsock_DataArrival(ByVal sender As System.Object, ByVal e As AxMSWinsockLib.DMSWinsockControlEvents_DataArrivalEvent) Handles Winsock.DataArrival
Dim data as string
data = winsock.getdata(data)
Listbox1.items.add(data)'so sehen wir was ankommt'
End Sub
  Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If TextBox1.Text = "" Then
Else
If Winsock.ctlstate = 7'nur shcicken falls wir eine Verbindung haben'
winsock.senddata(textbox1.text)
textbox1.clear
End If
End If
    End Sub
End Class
Das wars auch schon jetz habt ihr euren kleinen 1 Client winsock server und client fertig