Multiconexión con Winsock., Lo básico sobre el control winsock |
Bienvenido, invitado ( Identificarse | Registrarse )
![]() ![]() |
Multiconexión con Winsock., Lo básico sobre el control winsock |
Apr 5 2008, 10:40 PM
Publicado:
#1
|
|
|
Newbie Grupo: Miembro Edad: N/A Temas por día: 0.00 Mensajes: 4 Hora local: Jul 31 2010, 01:39 PM Registrado: 31-March 08 Miembro No.: 44 |
Hola, bueno voy ha explicar un poco como hacer una aplicacion multiconexion ( que acepta varias conexiones). Primero de todo necesitaremos añadir al projecto 2 controles winsock. Lo que haremos sera poner uno a la escucha y cuando este reciva una ConnectionRequest, es decir cuando intenten conectar con nosotros, el winsock repartira las conexiones hacia el winsock 2... Pero que pasa si el winsock 2 esta ocupado? Nada ya que crearemos un array de este control e iremos creando winsock2(x) cada vez que lo necesitemos. Vamos a comenzar.
Aplicación Multiconexión Añadimos los controles Winsock... ![]() Como vemos en la imagen el winsock numero 1 siempre estara a la escucha de peticiones, cuando reciva una le pasara la conexion a uno de los winsock2 con array. Los winsock2 no estan a la esucha por lo tanto esperan hasta que winsock1 les pase una conexion. Como winsock1 hace esta tarea? CÓDIGO Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long) Dim socketCreado As Integer 'Definimos una variable integer socketCreado = CrearSocket 'Llamamos a la funcion CrearSocket MUY IMPORTANTE! Winsock2(numSocket).Accept requestID 'Aceptamos la peticion con el socket creado End Sub Bien con este codigo winsock1 repartira las conexiones entre el array de winsock2, bueno en realidad no faltaria la funcion CrearSocket: CÓDIGO Private Function CrearSocket() As Integer Dim Sockets As Integer 'Variable que cojera el numero de sockets Dim x As Integer 'Contara los sockets que ai Sockets = Winsock2.UBound 'Nos vamos hasta el final de los winsock para ver los que tenemos For x = 0 To Sockets ' Recorremos todos los winsocks If Winsock2(i).State = sckClosed Then 'Comprovamos los sockets inactivos CrearSocket =x 'Si winsock2 esta inactivo lo utilizamos Exit Function 'Salimos de la funcion End If Next Load Winsock2(Socket + 1) 'En el caso que no tengamos sockets inactivos, crea un socket CrearSocket = Winsock2.UBound 'Pasamos el numero de sockets actuales a CrearSocket End Function Bien esta quiza es la parte mas importante, ya que se encarga de mirar por los sockets inactivos o bien los crea para poder pasarles la nueva conexion entrante. Creando un ejemplo Ahora crearemos un ejemplo para que quede mas claro lo explicado. Creamos un projecto y añadimos los siguientes controles: ![]() Bueno, recordar de crear el array, para quien no sepa como hacerlo (una de las maneras): Boton Derecho sobre el control Copiar Pegar en el mismo formulario Saldra un aviso para crearlo, aceptais. Bien ahora ya tenemos el formulario creado, pasemos al codigo... CÓDIGO Private Sub Winsock1_ConnectionRequest(ByVal RequestID As Long) ' Es el codigo de antes Dim socketCreado as integer socketCreado = CrearSocket Winsock2(socketCreado).Accept requestID Text1.text = Text1.text & vbNewline & "Petición Aceptada Socket num " & socketCreado & " interactuando" End sub Bien aqui lo unico que hacemos es informar a partir del text1 que recivimos una peticion y que esta a sido atendida por uno de los sockets. Nuestro Winsock1 solamente ara esto, estar a la escucha para distribuir las conexiones entrantes entre el array de winsocks, por lo tanto en el command1 ponemos: CÓDIGO Private Sub Command1_Click() Winsock1.Close ' Cerramos el winsock para no dar problemas Winsock1.LocalPort = text3.text 'El puerto a esuchar es el que introduzcamos en text3.text Winsock1.Listen ' dejamos a la esucha el winsock End Sub Bien con este ejemplo unicamente recivimos peticiones y las mostramos por text1.text para que se vea como funciona la cosa... el ejemplo de por si no es funcional 100% pero si vale para que lo entendais. ![]() Bueno espero que guste |
|
|
|
Feb 23 2010, 03:47 PM
Publicado:
#2
|
|
|
Newbie Grupo: Miembro Edad: 16 Temas por día: 0.03 Mensajes: 4 Hora local: Jul 31 2010, 06:39 AM Registrado: 23-February 10 Desde: localhost Miembro No.: 455 |
gracias me sirve ok
|
|
|
|
Feb 23 2010, 06:05 PM
Publicado:
#3
|
|
![]() Administrador Grupo: VIP Edad: 20 Temas por día: 0.37 Mensajes: 353 Hora local: Jul 31 2010, 06:39 AM Registrado: 26-December 07 Desde: México Miembro No.: 1 |
gracias me sirve ok Visual BASIC es algo antaño pero igual es aun muy funcional en algunos casos. -------------------- Contáctanos: staff@codebit.org Soporte: support@codebit.org Aprendiendo a usar el foro Pagina de inicio ![]() |
|
|
|
Feb 26 2010, 07:43 PM
Publicado:
#4
|
|
![]() Advanced Member Grupo: Élite Edad: 250 Temas por día: 0.06 Mensajes: 51 Hora local: Jul 31 2010, 11:39 AM Registrado: 3-April 08 Desde: MX Miembro No.: 47 |
exelente Teko, me llamo la atencion el post y es muy buen contenido, como para hacer un servidor para tu propio protocolo
-------------------- |
|
|
|
Feb 27 2010, 02:51 AM
Publicado:
#5
|
|
![]() Administrador Grupo: VIP Edad: 20 Temas por día: 0.37 Mensajes: 353 Hora local: Jul 31 2010, 06:39 AM Registrado: 26-December 07 Desde: México Miembro No.: 1 |
exelente Teko, me llamo la atencion el post y es muy buen contenido, como para hacer un servidor para tu propio protocolo Mcrow z3r0 eres tu? Waoo por fin te sueltan la correa, seguro que no has dejado de aprender como usar el teclado no? jaja un saludo bro!! y si muy buen manual el de Teko solo que hace mucho que no lo veo por acá. -------------------- Contáctanos: staff@codebit.org Soporte: support@codebit.org Aprendiendo a usar el foro Pagina de inicio ![]() |
|
|
|
![]() ![]() ![]() |
| Versión Lo-Fi | Fecha y Hora actual: 31st July 2010 - 11:39 AM |