Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Kasi

#41
Bases de Datos / Re: Agregar registro a sql server
7 Septiembre 2009, 16:12 PM
Prueba con :
SELECT TOP(1) id FROM NOMBRE_TABLA ORDER BY ID ASC
Esto te deberia ordenar la tabla según la ID, y cojerte el ID mas alto que estará en la primera fila, si no , solo cambia ASC por DESC y listo.

Saludos
#42
Lo que deberias hacer mejor es crear un hilo que gestione la subida de archivos, asi puedes seguir usando el programa sin tener que preocuparte de la subida.
#43
Buenas, hace tiempo E0n posteó un source de como empezar a hacer un troyano en VB y c++, la parte del Cliente VB es multiconexión, quiza te sirva para echarle un ojo y ver como va el tema.

http://foro.elhacker.net/analisis_y_diseno_de_malware/querias_tutos_de_programacion_de_malware_pues_toma-t196251.0.html

Ahi viene el link y el source, espero que te sirva.
#44
Mmm el Formulario Añadir descarga lo haces nuevo al pulsar algún botón en el Form1? De ser asi , podrias hacer un constructor nuevo para el formulario AñadirDescarga, y pasarle como parametro el formulario Form1 , asi tendrias un acceso al Form1 y no tendrias problemas para acceder a el.

#45
Buenas !! Tras unos dias de inactividad vuelvo a la carga :D, conseguí resolver el problema, al final resulta que era que en la Funcion de LeerSocket, solo obtiene los datos del cliente antes de entrar al while, con lo cual siempre que actualices el cliente, la parte de leersocket nunca estará actualizada con los datos nuevos, y devuelve siempre los viejos.

Bueno ahora me queda de resolver un pequeño problema, en el form principal tengo un botón que te abre otro form de datos y acciones que puedes realizar, el caso es que al darle al botón creo el nuevo form( si no está creado ya uno para ese cliente, y se lo añado a la estructura, para que tenga el enlace a su formulario,grabo en la HashTable de clientes el cliente actualizado, pero cuando intento recibir datos y mandarlos al formulario de acciones de ese cliente, el puntero en la estructura aparece = Nothing !!! No se guarda!!

Aqui el código:


Dim InfoCliente As InfoDeUnCliente
        Try
            If Clientes.Count = 0 Then
                Exit Sub
            End If
            Dim IDT As Net.IPEndPoint
            IDT = ObtenerValorCelda("IDTerminal")'Funcion que obtiene el Identificador del cliente
            InfoCliente = Clientes(IDT) 'Saco el cliente
            If InfoCliente.Manager Is Nothing OrElse InfoCliente.Manager.IsDisposed Then
                InfoCliente.Manager = New ClientManager(IDT, Me)
                InfoCliente.Manager.Tag = IDT.ToString
                Clientes(IDT) = InfoCliente' Una vez creado el form, lo guardo actualizado.
            End If
            InfoCliente.Manager.Show()
            InfoCliente.Manager.Activate()

        Catch ex As Exception
            SetLog("Excepcion en Llamada AbrirCliente: " & ex.Source & " " & ex.Message, frmLog)
        End Try


Hasta aqui se supone que todo va perfecto, mirando la depuración, el cliente tiene un puntero al form correcto.

Pero si recibo datos que van destinados a ese form....


Try
            InfoClienteActual = Clientes(IDTerminal) 'Aqui al sacar el cliente, despues de haber creado el manager en el paso anterior,
                                                                  'devuelve Manager = Nothing x_X
            For Each f As Object In InfoClienteActual.Manager.MdiChildren ' Aqui salta el error diciendo que el objeto Manager es nulo
                    If (f.Tag = IDTerminal.ToString & "#rs") Then
                        f.GetInfo(datos)
                    End If
            Next

Catch ex As Exception
            SetLog("Excepcion en el Evento DatosRecibidos: " & ex.Source & " " & ex.Message, frmLog)
End Try


A ver si consigo dejarlo depurado que ya tengo ganitas de seguir avanzando...

Saludos !
#46
Vale he quidado los SynckLock, y parece que ahora la estructura no se pierde, pero no actualiza los datos que le llegan, es decir es como si siempre se quedara con los datos almacenados del primer comando y no renueva lo que tiene en UltimosDatosRecibidos con la nueva información que se envia.

Supongamos, que desde un cliente envian una "a", cuando no hay datos si que mete en UltimosDatosRecibidos la "a", pero si posteriormente ese cliente envia como datos "b", sigue mostrando "a", y no renueva UltimosDatosRecibidos = "b".

Y cuando consigo que los UltimosDatosRecibidos sean = "b", es cuando pierdo el resto de datos de ese cliente que tengo en la estructura  :-(
#47
Bueno bueno...ya tengo localizado donde llega el problema, pero sigo dandole vueltas...os dejo el code para que veais...

En esta función es en la que espero las conexiones de clientes, que una vez conectados les asigno un hilo para cada uno para que la siguiente funcion , LeerSocket() se encargue de ir leyendo cada cliente.Lo de lecturas de clientes no tiene problema, no confunde Ids ni nada, es decir lee correctamente del socket que le corresponde, pero por lo que parece cuando el socket deja de recibir el comando con la info de los datos del cliente para recibir cualquier otro comando, es cuando pierdo los datos...

Private Sub EsperarCliente()
        On Error Resume Next
        Dim InfoClienteActual As InfoDeUnCliente
        InfoClienteActual = Nothing
        With InfoClienteActual
            While True
                .Socket = tcpLsn.AcceptSocket() 'Se queda esperando la conexion de un cliente
                IDClienteActual = .Socket.RemoteEndPoint
                .Thread = New Thread(AddressOf LeerSocket)
                .Ip = IDClienteActual.Address.ToString
                SyncLock Me
                    Clientes.Add(IDClienteActual, InfoClienteActual)
                End SyncLock
                RaiseEvent NuevaConexion(IDClienteActual)
                .Thread.Start()
            End While
        End With
    End Sub


Con esta función proceso el lo que llega por el socket del cliente...

Private Sub LeerSocket()
        Dim IDReal As Net.IPEndPoint 'ID del cliente que se va a escuchar
        Dim Recibir() As Byte 'Array utilizado para recibir los datos que llegan
        Dim InfoClienteActual As InfoDeUnCliente 'Informacion del cliente que se va escuchar
        Dim Ret As Integer = 0
        IDReal = IDClienteActual
        InfoClienteActual = Clientes(IDReal)
        With InfoClienteActual
            While True
                If .Socket.Connected Then
                    Recibir = New Byte(1024) {}
                    Try
                        Ret = .Socket.Receive(Recibir, Recibir.Length, SocketFlags.None)
                        If Ret > 0 Then
                            .UltimosDatosRecibidos = Encoding.ASCII.GetString(Recibir)
                            SyncLock Me
                                Clientes(IDReal) = InfoClienteActual ' Aqui actualizo los datos nuevos que llegan del cliente...
                            End SyncLock                                   'pero solo deberia afectar al campo de Ultimos datos recibidos y no al resto..                       
                            TotalDatos(Ret, lbDatosReci)
                            RaiseEvent DatosRecibidos(IDReal)
                        Else
                            RaiseEvent ConexionTerminada(IDReal)
                            Exit While
                        End If
                    Catch e As Exception
                        If Not .Socket.Connected Then
                            RaiseEvent ConexionTerminada(IDReal)
                            Exit While
                        End If
                    End Try
                End If
            End While
            Call CerrarThread(IDReal)
        End With
    End Sub


El ajo se está cociendo en la Función de LeerSocket, estoy convencido, pero soy incapaz de ver lo que está pasando, creo que de tanto mirarlo ya no lo veo y seguro que es un error tonto...
#48
En teoria si, pero no deberia afectar a la hora de perder datos, lo que hago es :

Busco el cliente que le corresponde, actualizo sus datos, pero en ningun momento borro los que ya tiene existentes, y por último actualizo el cliente machacando lo que habia en ese hueco de la HashTable y metiendo la estructura actualizada.La primera vez recupera correctamente los datos, pero la segunda y sucesivas no, puede ser que no esté sobreescribiendo el mismo index de la Hashtable y haya 2 pero recupere el incorrecto?
#49
El lenguaje que estoy usando es VB.Net, dejo un par de trozos donde relleno la estructura por primera vez, y donde la completo posteriormente, asi como un trozo donde la uso para obtener la información.

Esta es la estructura.

        Public Structure InfoCliente
        Public Socket As Socket 'Socket por cada cliente
        Public Thread As Thread 'Thread utilizado para el cliente
        Public DatosRecibidos As String 'Datos que el cliente nos envia
        Public Ip As String 'La dirección del cliente
        Public Nombre As String ' Nombre
        Public Status As String  'Para conocer si el cliente esta utilizando la aplicación
        Public Manager As ClientManager ' Formulario donde podemos consultar información del cliente.


Luego cuando recibo la conexión de algun cliente hago:


.Socket = tcpLsn.AcceptSocket() 'Se queda esperando la conexion de un cliente
IDClienteActual = .Socket.RemoteEndPoint
.Thread = New Thread(AddressOf LeerSocket)
SyncLock Me
      Clientes.Add(IDClienteActual, InfoClienteActual) ' Esta es la hashTable donde los almaceno.
End SyncLock
RaiseEvent NuevaConexion(IDClienteActual)
.Thread.Start()


Y luego para renovar la info del cliente:

Dim InfoClienteActual As InfoCliente
Dim IDReal as Net.IpEndPoint
'Aqui obtengo la ID del cliente
' Y renuevo la posicion de la tabla con los datos nuevos
InfoClienteActual.Nombre = "Pepito"
Clientes(IDReal) = InfoClienteActual


Pero en algún punto es donde se pierde y borra toda la información que no es del socket ni del thread, incluso si creo un nuevo formulario manager para el cliente, pierde la referia hasta el y devuelve Nothing en todos los campos, menos los dos que dije antes.
#50
Muy buenas a todos, hace algún tiempo que empecé a diseñar una aplicación que tiene una pequeña estructura donde guardo información.
Para guardar todas las instancias de la estructura utilizo un HashTable donde agrego cada instancia.
HashTable(Id,Nombre de la Instancia)

El problema viene que a medida que voy generando instancias de esa estructura y rellenandolas, en principio todo funciona perfectamente, la primera vez que intento recuperar datos de alguna instancia los recupera bien, pero si los intento recuperar una segunda vez por ejemplo, de una instancia que ya he consultado antes, no contiene nada...solo devuelve correctamente el thread que la maneja, pero de las variables que almacenan datos(strings y demas...) no obtiene nada.He revisado el código de arriba a abajo por si en algun momento hago algo que pueda sobreescribir la instancia dentro del HashTable, pero nada.

¿Alguien sabe a que puede deberse? Ya no me quedan mas ideas para probar x_X

Saludos y gracias.