Título: obtener index de winsock Publicado por: ..::[ thekingkid ]::.. en 17 Agosto 2006, 20:34 pm buenas... las tengas he aki un problema que me surgio y no he logrado resolver.. espero me puedan ayudar se agradece desde ante mano
tengo un winsock al que llame sock1 que permite varias conexiones al mismo puerto... Citar Private Sub sock1_ConnectionRequest(Index As Integer, ByVal requestID As Long) Sock1(Index).Close Sock1(Index).Accept requestID TxtConectados.AddItem Sock1(Index).RemoteHostIP & ":" & Sock1(Index).LocalPort & ":" & Conexiones CCliente.AddItem Conexiones Text2.Text = Conexiones Conexiones = Conexiones + 1 Load Sock1(Conexiones) Sock1(Conexiones).LocalPort = TxtPuerto.Text Sock1(Conexiones).Listen end sub entonces a toda mandarina se conectan varios etc etc pero no e logrado hacer que se borren de la lista cuando se desconecten.... he intentado en el metodo winsock_close() pero no funciona lo he intentado de esta manera Citar Private Sub Sock1_Close(Index As Integer) TxtConectados.RemoveItem Sock1(Index).Tag End Sub entonces como obtengo el numero de el sock que se ha cerrado... tambien he intentado con un timer que cheque el estado del sock(#sock).state=7 entonces que lo deje pero si es diferente de 7 que lo quite de la lista como hacerlo gracias!!!!!!!!!!!!1 Título: Re: obtener index de winsock Publicado por: n3ts4mura1 en 17 Agosto 2006, 21:13 pm Haber si esto te sirve:
Private Sub ws_ConnectionRequest(index As Integer, ByVal requestID As Long) Dim actIndex As Integer Dim strData As String On Local Error Resume Next Err.Clear '//Un usuario solicita nueva conexión y verificamos que se realiza '//a través del canal 0 de WS que es el servidor a la escucha. If index = 0 Then If freeSockets.Count <> 0 Then actIndex = freeSockets(1) freeSockets.Remove 1 '//Aceptar conexión recuperando hilo users(actIndex) = "" rqs(actIndex) = CStr(requestID) ws(actIndex).LocalPort = 0 ws(actIndex).Accept requestID Else idServer = idServer + 1 actIndex = idServer '//Aceptar conexión en nuevo hilo ReDim Preserve users(1 To actIndex) ReDim Preserve rqs(1 To actIndex) users(actIndex) = "" rqs(actIndex) = CStr(requestID) Load ws(actIndex) ws(actIndex).LocalPort = 0 ws(actIndex).Accept requestID End If End If '//preparar cadena de identificación strData = "[REQUEST]|" + CStr(requestID) sendSERVER actIndex, strData End Sub Título: Re: obtener index de winsock Publicado por: ..::[ thekingkid ]::.. en 17 Agosto 2006, 21:36 pm grax pero no entendi mucho deja verlo mas detallado saludos!!!!
Título: Re: obtener index de winsock Publicado por: Castord en 19 Agosto 2006, 03:03 am Ese problema lo tuve yo y lo solucione una condicional anidada que comparaba el texto de la lista con el ip de la maquina desconectada. Cada la item de mi lista tiene un ip y un separador que con un simple algoritmo de descomposicion de cadenas que compara cada string. El drama surge con la tendencia de evento a repetirse indefinidamente.
Desarrola esa idea si te parece. A mi me funciono. Título: Re: obtener index de winsock Publicado por: ..::[ thekingkid ]::.. en 29 Agosto 2006, 22:38 pm perdon que me quede ausente por unos dias por el trabajo... pero he tenido un tiempo y pos yo esto habia pensado
el el conexion reques del winsock puse esto pero antes les xplico sock1= un winsock txtconectados= un listbox ccliente= un combox text2.= otra caja de texto conexiones= una variable tipo integer (entera) he aki el codigo (aki todo bien) cuando algun cliente se conecta se le añade a el listbox txtconectados se le añade la ip remota y el puerto local y el numero de index que le toco y luego al combox ccliente se le añade el index del winsock con el que se ha conectado osea que si ya habia ocupado el 1 seguia entonces el 2 etc etc etc a el text2.text tambien se le pone el numero de la variable conexiones (para que veamos cuantos clientes se han conectado y para que el timer tome su valor y cheque el estado) luego se abre otro sock y se pone a la escucga de aki todo bien Código: Private Sub sock1_ConnectionRequest(Index As Integer, ByVal requestID As Long) luego..... entonces utilizo un timer para comprobar el estado de cada uno de los index del sock con el text2 este toma el valor de cada vez que se conecta el el sock conexion request ahi esta.: Código: timer1_timer() exit sub error: end sub Título: Re: obtener index de winsock Publicado por: MANULOMM en 30 Agosto 2006, 03:35 am hola, lo que debes hacer es dejarlos abiertos, y antes de que se conecte un nuevo cliente el servidor verifique si hay alguno abierto
para ocuparlo asi: Código: 'Carga un nuevo socket al arreglo y devuelve su indice Atentamente JUAN MANUEL LOMBANA MEDELLÍN - COLOMBIA |