Winsock.Count
Mira, este sirve para contar el numero de controles que tienes en la matriz... pa que entiendas, si tienes un cliente por ejemplo com muchas conexiones y las tienes controladas con una matriz de winsock. winsock.count podras manejar todo el numero de conexiones hechas con la matriz del control winsock que tengas creada.
Aqui u ejemplo de un cliente de chat donde lo usan.
Option Explicit
Dim boolServer As Boolean
Private Sub cmdClient_Click()
' Als Client identifizieren und die Möglichkeiten vorgeben
boolServer = False
cmdServer.Enabled = False
cmdClient.Enabled = False
cmdGo.Enabled = True
End Sub
Private Sub cmdGo_Click()
Dim I As Integer
' Loge ich mich gerade ein ?
If cmdGo.Caption = "Go" Then
' Erst mal die Einstellungen eifrieren
txtNick.Enabled = False
txtHostIP.Enabled = False
txtPort.Enabled = False
cmdGo.Caption = "Stop"
' Bin ich Server ?
If boolServer = True Then
WinSock(0).LocalPort = txtPort.Text
WinSock(0).Listen
stBar.SimpleText = "Status: Listening"
Else
WinSock(0).RemotePort = txtPort.Text
WinSock(0).RemoteHost = txtHostIP.Text
WinSock(0).Connect
stBar.SimpleText = "Status: Connecting to " & _
txtHostIP.Text & ":" & txtPort.Text
End If
' Ich logge mich gerade aus
Else
' Bin ich Server ?
If boolServer = True Then
' Erst mal alle Verbindungen schließen und unnötige
' WinSocks entladen
For I = 1 To WinSock.Count - 1
WinSock(I).Close
Unload WinSock(I)
Next I
Else
WinSock(0).Close
End If
' Jetzt wieder alles in den Urzustand versetzen
txtNick.Enabled = True
txtPort.Enabled = True
txtHostIP.Enabled = True
cmdGo.Caption = "Go"
cmdGo.Enabled = False
cmdClient.Enabled = True
cmdServer.Enabled = True
stBar.SimpleText = "Status: Offline"
End If
End Sub
Private Sub cmdSend_Click()
Dim strMessage As String
strMessage = "{" & txtNick.Text & "}:" & rtfSend.Text
' Bin ich Server
If boolServer = True Then
SendMessage strMessage
rftReceive.Text = rftReceive.Text & vbCrLf & strMessage
Else
If WinSock(0).State = 7 Then WinSock(0).SendData strMessage
End If
rtfSend.Text = ""
End Sub
Private Sub cmdServer_Click()
' Erst mal die Buttons ändern
cmdClient.Enabled = False
cmdGo.Enabled = True
cmdServer.Enabled = False
' Jetzt bin ich Server
boolServer = True
End Sub
Private Sub WinSock_Close(Index As Integer)
If Index = "0" Then
stBar.SimpleText = "Status: Offline"
Else
stBar = "Status: Verbunden mit " & WinSock.Count - 1 & " " & _
"Client(s)."
End If
End Sub
Private Sub WinSock_Connect(Index As Integer)
' Jetzt soll man ja wissen, daß man drinnen ist
stBar.SimpleText = "Status: Connected to " & txtHostIP.Text & ":" _
& txtPort.Text
End Sub
Private Sub WinSock_ConnectionRequest(Index As Integer, ByVal _
requestID As Long)
' Ein neues WinSock laden und die Verbindung übernehmen lassen
Dim intZähler As Integer
intZähler = WinSock.Count
Load WinSock(intZähler)
WinSock(intZähler).LocalPort = txtPort.Text
WinSock(intZähler).Accept requestID
stBar.SimpleText = "Status: Verbunden mit " & WinSock.Count - 1 & _
" Client(s)."
End Sub
Private Sub WinSock_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Dim strMessage As String
' Nachricht holen
WinSock(Index).GetData strMessage
' Bin ich der Server? Dann weiterleiten
If boolServer = True Then SendMessage strMessage
' Ich mags auch sehen
rftReceive.Text = rftReceive.Text & vbCrLf & strMessage
End Sub
Private Sub SendMessage(Message As String)
Dim I As Integer
' Weiterleiten an die anderen clients
For I = 1 To WinSock.Count - 1
' Erst mal schauen ob die Verbindung steht
If WinSock(I).State = 7 Then WinSock(I).SendData Message
Next I
End Sub
Private Sub WinSock_Error(Index As Integer, 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)
If Index < 0 Then
WinSock(Index).Close
Unload WinSock(Index)
rftReceive.Text = rftReceive.Text & vbCrLf & "{System}: " & _
"Verbindung zu einem Host abgebrochen."
Else
WinSock(Index).Close
rftReceive.Text = rftReceive.Text & vbCrLf & "{System}: Dich " & _
"hats gerade gegrillt."
cmdServer.Enabled = True
cmdClient.Enabled = True
cmdGo.Caption = "Go"
cmdGo.Enabled = False
stBar.SimpleText = "Status: Offline wegen Verbindungsproblem."
End If
Fuente -->
AquiSaludos, atte skapunky