PDA

Ver la versión completa : Desarrollo Cliente/Servidor



biyonder
27-07-2009, 12:37
Hola chicos.

Ando liado con una aplicacion cliente/servidor en Visual Basic 6, pero me inquieta algo: ¿cómo podría hacer que dados 10 clientes, se conecten a mi (servidor) y que cada cliente use un unico puerto para conectar? ¿Se puede usar un unico socket con varios clientes? Gracias

Marchi
27-07-2009, 21:31
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



Private Function NewSock() As Integer

ContWS = ContWS + 1
Load wsCon(ContWS)
NewSock = ContWS
End Function



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

biyonder
27-07-2009, 23:40
Muchas gracias pero ya encontre la solucion en un tutorial sobre aplicaciones multi-conexion de visual basic. Tan solo hay que crear un arreglo de winsockets y en el Connection_request administrar las conexiones de los clientes. Gracias!!