Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: BlackZeroX en 19 Abril 2010, 00:54 am



Título: * [Source+Funcion+vb6] AceptarConeccion (Sencilla funcion)
Publicado por: BlackZeroX en 19 Abril 2010, 00:54 am
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:

Código
  1.  
  2. '
  3. '   /////////////////////////////////////////////////////////////
  4. '   // Autor:   BlackZeroX ( Ortega Avila Miguel Angel )       //
  5. '   //                                                         //
  6. '   // Web:     http://InfrAngeluX.Sytes.Net/                  //
  7. '   //                                                         //
  8. '   //    |-> Pueden Distribuir Este Codigo siempre y cuando   //
  9. '   // no se eliminen los creditos originales de este codigo   //
  10. '   // No importando que sea modificado/editado o engrandesido //
  11. '   // o achicado, si es en base a este codigo es requerido    //
  12. '   // el agradacimiento al autor.                             //
  13. '   /////////////////////////////////////////////////////////////
  14. '
  15. Option Explicit
  16. Private Enum SockState
  17.    sckClosed = 0
  18.    sckOpen
  19.    sckListening
  20.    sckConnectionPending
  21.    sckResolvingHost
  22.    sckHostResolved
  23.    sckConnecting
  24.    sckConnected
  25.    sckClosing
  26.    sckError
  27. End Enum
  28. Public Function IndexSocketCerrado(ByRef Socket As Object) As Integer
  29. Dim Index                   As Integer
  30. Dim SockSt                  As SockState
  31.    IndexSocketCerrado = -1
  32.    For Index = Socket.lbound To Socket.UBound
  33.        With Socket(Index)
  34.            SockSt = .State
  35.            If SockSt = sckClosed Or SockSt = sckListening Or SockSt = sckClosing Then
  36.                'If SockSt = sckClosed Or SockSt = sckListening Or SockSt = sckClosing Or SockSt = sckError Then    '   //  Optativo
  37.                IndexSocketCerrado = Index
  38.                Exit For
  39.            End If
  40.        End With
  41.    Next
  42. End Function
  43.  
  44. Public Function AceptarConexion(ByRef Socket As Object, requestid As Long) As Boolean
  45. Dim SocketIndex             As Integer
  46.    SocketIndex = IndexSocketCerrado(Socket)
  47.    If SocketIndex = -1 Then
  48.        SocketIndex = Socket.UBound + 1
  49.        Load Socket(SocketIndex)
  50.    End If
  51.    Socket(SocketIndex).CloseSck
  52.    Socket(SocketIndex).Accept requestid
  53. End Function
  54.  
  55.  

la llamada:

Código
  1.  
  2. '   //  ---->
  3. '   //  Donde Socket_In es el socket que aceptara la conexion entrante en el Socket_Conexion
  4. '   //  Cabe destacar que Socket_In debera ser una matrix de controles
  5. '   //  ---->
  6. Private Sub Socket_Conexion_ConnectionRequest(Index As Integer, ByVal requestid As Long)
  7.        Call AceptarConexion(Socket_In, requestid)
  8. End Sub
  9.  
  10.  

Descargar cSocketMaster + Ctl (Para manejarlo igual que el winsock de M$)

Código:

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!¡.