Die Community zu .NET und Classic VB.
Menü

Winsock Programmierung

 von 

Einleitung 

In diesem Tutorial wird gezeigt, wie man mit einfachen Mitteln eine Kommunikation zweier Programme über das TCP/IP Protokoll (sprich Netzwerk oder Internet) erstellt. Man braucht dazu nur das Winsock-Control welches bei Windows dabei ist. Als zweites wird VB über Einsteiger, sprich Professional oder Enterprise Edition, benötigt, da ansonsten das Winsock-Control keine Lizenz hat.

Dieses Tutorial besteht aus mehreren Teilen. Anfangen werde ich mit einem ganz einfachen TCP/IP Programm, sprich einem simplen CHAT. Später wird noch ein MultiUserChat folgen, sowie einige weiter Möglichkeiten das Protokoll zu verwenden.

Mit freundlichen Grüßen
Manuel Herzog

Was muß ich wisssen? Teil I  

Was sie brauchen ist die IP des Serverprogramms, dies ist vergleichbar mit der Adresse einer Strasse. Dann müssen sie sich noch auf einem Port, vergleichbar mit der Hausnummer, einigen. Haben sie dass überwunden, kann es eigentlich schon losgehen.

Die Methode Listen
Die Listen Methode ist eine der wichtigsten Funktionen, die gebraucht werden, damit sagen sie ihrem Windows, das alle Anfragen auf eine Verbindung zu diesem Winsock modul gehen sollen, wie als würden sie ein Haus mieten, so gelangt alle Post zu ihnen

Syntax: [Object].Listen

Sie müssen allerdings beachten, vor Ausführung dieser Methode einen Port zu setzen.z.B:
Winsock1.LocalPort = 1111
      Winsock1.Listen

Listing 1

Die Methode Connect
Natürlich muss sich, damit die Verbindung entsteht, ein Client-Programm mit dem ServerProgramm verbinden. Dafür brauchen sie folgenden Code.

Syntax: [Object].connect IP,Port

Bei IP müssen sie die IP Adresse des Serverprogramms einstellen, und natürlich auch den Port, hier 1111. Das sieht dann so aus:
Winsock1.Connect "127.0.0.1", 1111

Das Event Connection_Request
Dieses Event wird nun beim Server ausgeführt, damit die Verbindung wirklich zu Stande kommt, müssen sie die Verbindung annehmen.

Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
                 If Winsock1.State Not sckClosed Then Winsock1.Close
                 Winsock1.Accept requestID
               End Sub
Mit Winsock1.State können sie den momentanen Status des WinsockControls abfragen, damit die Verbindung nun entstehen kann, muss das WinsockControl aber im geschlossen Modus sein, dies passiert bei der if-Abfrage. Winsock1.Accept akzeptiert die Anfrage,die Verbindung steht nun.

Die Methode SendData
Was soll man dazu groß sagen? Mit dieser Methode werden Daten zum anderen Server gesendet.

Syntax: [Object1].SendData Data

Zum Beispiel:
Winsock1.SendData Text1.text

Diese Methode gehört zu beiden (Server und Client) genau wie das folgende Event.

Das Event Data_Arrival
Hier werden mit

[Object].GetData Data

Die angekommenden Daten abgerufen, z.B.:
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
              Dim s As String
                Winsock1.GetData s
                Text2.Text = s
              End Sub

Beispiel  

Ein kleines Beispiel
Dies ist der Inhalt von Form1, auf dem sich 2 CommandButtons befinden:

Private Sub Command1_Click()
  Form2.Show
End Sub

Private Sub Command2_Click()
  Form3.Show
End Sub

Private Sub Form_Load()
  Command1.Caption = "Server..."
  Command2.Caption = "Client..."
End Sub

Nun brauchen wir noch Form2, das den Server spielt, auf ihm benötigen wir 2 Textboxen, und ein Winsock-Modul, sowie folgenden Code:

Private Sub Form_Load()
  Winsock1.LocalPort = 1111
  Winsock1.Listen
End Sub

Private Sub Text1_Change()
  Winsock1.SendData Text1.Text
End Sub

Private Sub Winsock1_Close()
  Winsock1.Close
  Winsock1.Listen
End Sub

Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
  If Winsock1.State Not sckClosed Then Winsock1.Close
  Winsock1.Accept requestID
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim s As String

  Winsock1.GetData s
  Text2.Text = s
End Sub

Und damit das Programm komplett ist, brauchen wir natürlich auch noch den Clienten, dieser ist Form3, auf dem sich wieder die selben Controls befinden, wie auf dem ServerForm, zusätzlich aber noch eine Textbox, und ein CommandButton:

Private Sub Command1_Click()
  If Command1.Caption = "Connect" Then
    Winsock1.Connect Text3.Text, 1111
    Command1.Caption = "Disconnect"
  Else
    Winsock1.Close
    Command1.Caption = "Connect"
  End If
End Sub

Private Sub Form_Load()
  Command1.Caption = "Connect"
End Sub

Private Sub Text1_Change()
On Error Resume Next
  Winsock1.SendData Text1.Text
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim s As String

  Winsock1.GetData s
  Text2.Text = s
End Sub

Projekt als Download [7066 Bytes]

Fortsetzung folgt
In der Fortsetzung dieses Teils, wird noch ein besserer Client programmiert, und ein einfacher Server, sowie später noch ein Multiuserserver, und andere nützliche Programme die mit der Winsock anzustellen sind (Sprich Filetransfer und so). Damit wäre Teil I (IV) abgeschlossen.

Teil II Ein Chat (Server, Client)
Teil III Ein MultiUserServer dazu
Teil IV Sonstige nützliche Utensilien

Ihre Meinung  

Falls Sie Fragen zu diesem Tutorial haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.