Winsock Programmierung
von Manuel Herzog
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 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 SubMit 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.