Hola biyonder, necesitas un socket por cliente.
La idea es tener un socket al cual llegan las conecciones y al momento de aceptarlas, se las pasa a otro socket, que por lo general pertenece a un arreglo de sockets.
Para verlo mas claramente, el servidor tendra esta apariencia:
ws -> Socket de escucha. Este socket sera el que recibira todos los connectionrequest.
wsCon() -> Arreglo de sockets para despachar las conecciones
ContWS -> Entero que lleva la cuenta del socket a usar
Código:
Private Function NewSock() As Integer
ContWS = ContWS + 1
Load wsCon(ContWS)
NewSock = ContWS
End Function
Código:
Private Sub ws_ConnectionRequest(ByVal requestID As Long)
Dim n As Integer
n = NewSock()
If wsCon(n).State <> sckClosed Then wsCon(n).Close
wsCon(n).Accept requestID
End Sub
Obviamente esto es apenas un esquema.
Ademas NewSock siempre crea un nuevo socket y a medida que van terminando las conexiones los sockets que quedan vacios no se vuelve a usar. Una forma facil de corregir esto es recorriendo todo el vector de sockets comprobando si esta cerrado o no (en caso de estar cerrado se puede usar, si no, no) y en caso de estar todos en uso crear uno nuevo.
Otra forma un poco mas elegante seria usando una pila en donde poner los sockets que se van liberando.
Pero bueno, es para ponerse y mirar que combiene y como se puede mejorar. Lo importante es ver como funciona a grandes rasgos.
Saludos
Marcadores