Duda con winsock

Iniciado por abdiel2475, 20 Febrero 2011, 06:35 AM

0 Miembros y 1 Visitante están viendo este tema.

abdiel2475

Hola :p jaja bueno
mm vengo aqui preguntandoles una cosa que como puedo hacer esque miren
mi idea es crear un server y que en ese server se conecten max 10 connections
bueno todo eso ya lo ise :)

lo qe tengo duda y quiero resolver es este
un ejemplo estan 4 Pcs connectados:

1,2,3,4 <- estan conectados al server entonces

1,2,4 <- el 3º se desconecta

y vuelve a entrar o entra otro nuevo (que valor agarraria? 5º o rellenaria el vacio osea que seria el 3º?)

tengo esa duda y pss si incrementa en mi connectionrequest tengo esto


Private Sub sockMain_ConnectionRequest(Index As Integer, ByVal requestID As Long)
    If lblConnections.Caption = "10" Then
    sServerMsg = Time & " - " & "Cant accept more connections..."
    List1.AddItem (sServerMsg)
    List1.TopIndex = List1.ListCount - 1
    Else
   sServerMsg = "Connection request id " & requestID & " from " & sockMain(Index).RemoteHostIP
    List1.TopIndex = List1.ListCount - 1
  If Index = 0 Then
    List1.AddItem (sServerMsg)
    sRequestID = requestID
    intSockCnt = intSockCnt + 1
    lblConnections.Caption = intSockCnt
    Load sockMain(intSockCnt)
    'Socket(intSockCnt).LocalPort = 7575
    sockMain(intSockCnt).Accept requestID
    List1.TopIndex = List1.ListCount - 1
  End If
     End If

End Sub


bueno y quise hacer esto:

Private Sub sockMain_ConnectionRequest(Index As Integer, ByVal requestID As Long)
On Error GoTo Erro
    If lblConnections.Caption = "10" Then
    sServerMsg = Time & " - " & "Cant accept more connections..."
    List1.AddItem (sServerMsg)
    List1.TopIndex = List1.ListCount - 1
    Else
   sServerMsg = "Connection request id " & requestID & " from " & sockMain(Index).RemoteHostIP
    List1.TopIndex = List1.ListCount - 1
  If Index = 0 Then
    List1.AddItem (sServerMsg)
    sRequestID = requestID
    intSockCnt = intSockCnt + 1
    lblConnections.Caption = intSockCnt
    Load sockMain(intSockCnt)
    'Socket(intSockCnt).LocalPort = 7575
    sockMain(intSockCnt).Accept requestID
    List1.TopIndex = List1.ListCount - 1
  End If
     End If
    'End If
     Exit Sub
     
Erro:
    Dim TryCnt As Integer
     For TryCnt = 1 To intSockCnt
        If sockMain(TryCnt).State = sckConnected Then
            Else
             intSockCnt = intSockCnt + 1
    lblConnections.Caption = intSockCnt
    Load sockMain(TryCnt)
    'Socket(intSockCnt).LocalPort = 7575
    sockMain(TryCnt).Accept requestID
    MsgBox "Encontrado" & TryCnt
        End If
    Next TryCnt

End Sub

esque sale error ya que si estan 1,2,3,4
y el 3º se sale y vuelve a entrar qeraria tomar el valor de 4
pero ya existe haci qe sale error :p
alguna idea :D?

BlackZeroX

#1
.
Usa este codigo para volver a ocupar indices que ya estan los sockets desconectados, es decir que si antes tenias 0,1,2,3,4 se deconecta el 2 en la siguiente vez con estas funciones podras volver a ocupar dicho indice sin problemas.

Código (Vb) [Seleccionar]


'
'   /////////////////////////////////////////////////////////////
'   // 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  ' // Poner Close en lugar de CloseSck   si se usa el OCX WindSock de M$.
    Socket(SocketIndex).Accept requestid
End Function



Ejemplo de uso simple:

Código (Vb) [Seleccionar]


'   //  ---->
'   //  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



CSocketMaster... Con CTL.

http://infrangelux.sytes.net/fileX/?file=/BlackZeroX/Programacion/vb6/CSocketMaster.rar&dir=/BlackZeroX/Programacion/vb6&

Temibles Lunas!¡.
The Dark Shadow is my passion.

abdiel2475

omg :P muchas gracias
lo calaree!! :D