Visual Basic Forum

Visual Basic Forum
für VB6 und VB.NET Programmierer
 
RegistrierenRegistrieren  LoginLogin

Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB6] Tutorials
Autor
Nachricht
ZiG
Überflieger
Überflieger

Anmeldedatum: 16.04.2008
Beiträge: 421

Umgang mit einem Winsock Array
Verfasst am: 17.04.2008, 11:04

Thema: Winsock Array


1. Was ist ein Winsock Array und wozu braucht man es?

Ein normales Winsock werden die meisten von euch ja schon kennen, besonders wenn ihr euch das super Videotutorial von Bitchkiller angesehen habt.
Wenn nicht, dann solltet ihr das zuerst tun: http://www.vb-x.org/viewtopic.php?t=685

Also wozu braucht man nun ein Winsock Array?
Ganz einfach. Bei einem normalen Winsock stößt man recht schnell an Grenzen, besonders, wenn man eine Applikation programmieren möchte die mit mehreren Verbindungen umgehen muss. Wenn ihr also z.B. eine Sin Console programmieren und nicht hunderte Winsocks erstellen wollt, was natürlich nicht nur enorme Arbeit wäre, sondern auch ziemlich dämlich und von vornherein begrenzt von den maximalen Verbindungen, braucht ihr ein Winsock Array.

Ein Winsock Array ist ein normales Winsock, dem wir als Index eine Null zuweisen.
Sobald eine Anfrage zur Verbindung einlangt, erweitern wir dieses Array.


2. Winsock als Array beim Client einrichten

Ich gehe mal davon aus, dass ihr euch gut genug auskennt und wisst wie man ein Winsock Control erstellt.

Das wichtigste ist jetzt, dass ihr in den Eigenschaften vom Winsock Control bei „Index“ eine 0(Null) hineinschreibt.

Jetzt sieht eine Sub von Winsock z.B. so aus:
Code:
Private Sub Winsock1_DataArrival(Index As Integer, ByVal bytesTotal As Long)


Wie ihr seht, bekommt ihr jetzt den Index der Verbindung, die euch etwas sendet, übergeben.
Also jede Verbindung die ihr mit einem Server aufbaut, bzw. der Server mit euch, hat einen eindeutigen Index zugewiesen bekommen.

Das zuweisen des Indexes müssen wir uns dann noch selber basteln, aber vorher wollen wir unser Winsock Control auf Listen setzen.
Code:
Private Sub Form_Load()<br />Winsock1(0).LocalPort = 2222<br />Winsock1(0).Listen<br />End Sub


Also das Winsock Control mit dem Index 0(Null) dient uns nun zum warten auf Verbindungen und herstellen dieser.

Jetzt müssen wir eingehende Verbindungen entgegen nehmen und jeweils einen Index zuweisen. Dafür hab ich eine nette Funktion für euch, die den nächsten freien Index ermittelt.
Code:
Private Function FindFreeIndex() As Integer<br />Dim i As Integer<br />For i = 1 To Winsock1.Count - 1<br /> If Winsock1(i).State = sckClosed Then<br />  FindFreeIndex = i<br />  Exit Function<br /> End If<br />Next<br />'Falls keine Verbindung frei ist, wird eine angelegt.<br />FindFreeIndex = Winsock1.Count<br />Load Winsock1(FindFreeIndex)<br />End Function


Das ist jetzt lediglich die Funktion zum ermitteln eines freigewordenen Indexes. Falls keiner frei ist, wird einfach ein neuer angelegt.

Und den Index weisen wir so zu:
Code:
Private Sub Winsock1_ConnectionRequest(Index As Integer, ByVal requestID As Long)<br />Winsock1(FindFreeIndex).Accept requestID<br />End Sub


So wird einer eingehenden Verbindung also ein Winsock, bzw. der Index eines Winsocks zugewiesen.


Wenn etwas an den Clienten gesendet wird sieht die Annahme so aus.
Code:
Private Sub Winsock1_DataArrival(Index As Integer, ByVal bytesTotal As Long)<br />Dim data As String, cmd() As String<br /><br />Winsock1 (Index).GetData data<br /><br />cmd() = Split(data, "#")<br />Select Case cmd(0)<br /> Case "msgbox"<br />   Call MsgBox(cmd(1))<br />End Select<br /><br />End Sub


In Index wird uns logischerweise der Index der Verbindung übergeben.
Mit data empfange ich den String, der gesendet wurde und in cmd() Splitte ich den String auf.

Beim Server braucht ihr nichts zu ändern. Aber der Client kann nun mit einigen Servern umgehen. Wink

Das wäre jetzt also ein Winsock Array für z.B. eine Sin Console. Aber über dieses Winsock solltet ihr nicht unbedingt alle Befehle/Daten laufen lassen.
Am besten macht ihr euch noch ein Winsock Array bei dem dann der eigentliche Datenverkehr stattfindet.
Also Winsock1 sollte sich nur um die SinConsole kümmern.
Wenn man dann eine richtige Verbindung zu einem Server haben möchte, wo man weitere Funktionen nutzen kann, sollte vom Winsock1 an den Server eine Message gesendet werden, worauf der Server die Verbindung zum Winsock2 aufnimmt.
Nun besteht also die echte Verbindung, bei der alle Funktionen genutzt werden können.

Der Aufwand ist deshalb gut, da man einen besseren Überblick im Code hat und es auch viel leichter zu coden ist, als wenn man alles in eine Sub packen muß.


Das nächste Tut wird vom Datentransfer mit dem Winsock handeln. Wink
Bis dahin beschäftigt euch kräftig mit dem Winsock Array.

mfg
_________________
 
igoe
Gast





Verfasst am: 04.05.2008, 16:03

Danke für das Tutorial, habe nämlich gerade ein Problem mit Winsock&Array ^^ vll bekomme ich es ja hin.
 
Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB6] Tutorials

Tags: winsock array, winsock1, index

 
 Verwandte Themen   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Wie kann ich mich bei euch anmelden?? 796 20.05.2002, 00:28
Keine neuen Beiträge Eine kleine Frage an euch.. 906 30.09.2007, 08:57
Keine neuen Beiträge TopMost Funktion unter DirectX 921 27.07.2007, 10:48
Keine neuen Beiträge Wie Funktion nutzen ? 1101 29.06.2007, 20:59
Keine neuen Beiträge update funktion einbauen 1341 28.01.2007, 23:11
 



[ Time: 0.1999s ][ Queries: 85 (0.0548s) ][ GZIP on - Debug on ]