Publico el tema en respuesta a aceptación de Conexiones Multi-Cliente ( http://foro.elhacker.net/programacion_vb/conexiones_multiples_con_winsock_ayuda-t288193.0.html ).
Es muy sencilla pero a mas de uno les va a servir de algo... es la misma funcion que ocupo para mis proyectos
Que hace?
.............Acepta conexiones en una matrix de Socket's en este caso en particular esta diseñado para cSocketMaster
Con que funciona?
.............cSocketMaster +ctl ( Control de usuario ) donde este seria el que crearia la matrix requerida!¡.
Ventajas?
.............Se ocupan los indices anteriores que se encuentren con algun error o que no esten conectados realmente, es decir reduce el uso de la memoria. Se deben la maxima matrix ya para mas velocidad aun que esto seria modificable dubclaseificando el indice con algun Modulo de clase... pero bueno xP.
Codigo:
'
' /////////////////////////////////////////////////////////////
' // Autor: BlackZeroX ( Ortega Avila Miguel Angel ) //
' // //
' // Web: http://InfrAngeluX.Sytes.Net/ //
' // //
' // |-> Pueden Distribuir Este Codigo siempre y cuando //
' // no se eliminen los creditos originales de este codigo //
' // No importando que sea modificado/editado o engrandesido //
' // o achicado, si es en base a este codigo es requerido //
' // el agradacimiento al autor. //
' /////////////////////////////////////////////////////////////
'
Option Explicit
Private Enum SockState
sckClosed = 0
sckOpen
sckListening
sckConnectionPending
sckResolvingHost
sckHostResolved
sckConnecting
sckConnected
sckClosing
sckError
End Enum
Public Function IndexSocketCerrado(ByRef Socket As Object) As Integer
Dim Index As Integer
Dim SockSt As SockState
IndexSocketCerrado = -1
For Index = Socket.lbound To Socket.UBound
With Socket(Index)
SockSt = .State
If SockSt = sckClosed Or SockSt = sckListening Or SockSt = sckClosing Then
'If SockSt = sckClosed Or SockSt = sckListening Or SockSt = sckClosing Or SockSt = sckError Then ' // Optativo
IndexSocketCerrado = Index
Exit For
End If
End With
Next
End Function
Public Function AceptarConexion(ByRef Socket As Object, requestid As Long) As Boolean
Dim SocketIndex As Integer
SocketIndex = IndexSocketCerrado(Socket)
If SocketIndex = -1 Then
SocketIndex = Socket.UBound + 1
Load Socket(SocketIndex)
End If
Socket(SocketIndex).CloseSck
Socket(SocketIndex).Accept requestid
End Function
la llamada:
' // ---->
' // Donde Socket_In es el socket que aceptara la conexion entrante en el Socket_Conexion
' // Cabe destacar que Socket_In debera ser una matrix de controles
' // ---->
Private Sub Socket_Conexion_ConnectionRequest(Index As Integer, ByVal requestid As Long)
Call AceptarConexion(Socket_In, requestid)
End Sub
Descargar cSocketMaster + Ctl (Para manejarlo igual que el winsock de M$)
http://infrangelux.sytes.net/fileX/?file=/BlackZeroX/Programacion/vb6/CSocketMaster.rar&dir=/BlackZeroX/Programacion/vb6&
Nota: Si se desea usar este codigo para el WinSock de la Ocx de M$ debera editar las las propiedades de CloseSck a Close
Sangriento Infierno Lunar!¡.