elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Problema con codigo!!!
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con codigo!!!  (Leído 1,715 veces)
Nemutagk

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Problema con codigo!!!
« en: 15 Enero 2010, 23:08 pm »

Que tal, soy viejo lector del sitio / foro, pero apenas ahora escribo, no vengo a solicitar codigo ni que me hagan nada ;D, solo simplemente solicito de la manera mas atenta si pueden ayudarme a ver que estoy haciendo mal, veran, tengo una aplicacion cliente/servidor, que "monitorea" una maquina desatendida, que esta hace calculos matematicos y demas, la aplicacion cliente que se instala en dicha maquina lo unico que tiene que hacer es mandar screenshots de la maquina en cuestion al servidor, donde regularmente son checados, ya tengo ambas aplicaciones (cliente y servidor) y ya "envian" datos, sin embargo, no logro "guardar" eso datos en el archivo, ejemplo, el cliente me envia una imagen bmp (screenshot.bmp) de 3.2mb, el servidor acepta el envio y segun el contador de bytes recibidos se reciben todos los bytes (los 3.2mb), pero cuando verifico el archivo generado (en la maquina donde esta el servidor) solo se guardan 54bytes, que verificando en el programa servidor es el ultimo paquete que se envia del cliente al servidor, aqui dejo el codigo de los programas

cliente...
Código
  1. Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
  2.    Dim Buffer As String
  3.    Winsock1.GetData Buffer
  4.    estado.Text = estado.Text + vbCrLf + "Comando: " + Buffer
  5.    estado.SelStart = Len(estado.Text)
  6.    comandos (Buffer)
  7. End Sub
  8.  
  9. Public Function comandos(comando As String)
  10.    If comando = "screenshot" Then
  11.        Picture1.Picture = CaptureScreen()
  12.        SavePicture Picture1.Picture, "c:\screenshot.bmp"
  13.        urlFile.Text = "c:\screenshot.bmp"
  14.  
  15.        Open urlFile For Binary As #1
  16.            var_DataFile = Input(LOF(1), 1)
  17.        Close #1
  18.  
  19.        var_DataSize = Len(var_DataFile)
  20.        estado.Text = estado.Text & vbCrLf & "Enviando informacion de datos..."
  21.        estado.SelStart = Len(estado.Text)
  22.        Winsock1.SendData "Envio|" & urlFile.Text & "|" & var_DataSize
  23.    End If
  24.  
  25.    If comando = "enviar" Then
  26.        Call sendfile
  27.    End If
  28. End Function
  29.  
  30. Public Function sendfile()
  31.    estado.Text = estado.Text & vbCrLf & "Enviando datos..."
  32.    estado.SelStart = Len(estado.Text)
  33.    Winsock1.SendData var_DataFile
  34. End Function
  35.  

Servidor...
Código
  1. Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
  2.    Dim Texto As String
  3.    Dim Ruta As String
  4.    Dim Peso As String
  5.    Dim suma As String
  6.    Dim Temporal As String
  7.  
  8.    Winsock1.GetData Texto
  9.  
  10.    If Mid(Texto, 1, 5) = "Envio" Then
  11.        estado.Text = estado.Text & vbCrLf & "Solicitando informacion del archivo..."
  12.        estado.Text = estado.Text & vbCrLf & Texto
  13.        estado.SelStart = Len(estado.Text)
  14.        Texto = Mid(Texto, 7, Len(Texto) - 5)
  15.        For i = 1 To Len(Texto)
  16.            If Mid(Texto, 1, 1) <> "|" Then
  17.                Ruta = Ruta + Mid(Texto, 1, 1)
  18.            ElseIf Mid(Texto, 1, 1) = "|" Then
  19.                Texto = Mid(Texto, 2, Len(Texto) - 1)
  20.                Exit For
  21.            End If
  22.            Texto = Mid(Texto, 2, Len(Texto) - 1)
  23.        Next
  24.        Peso = Val(Texto)
  25.        estado.Text = estado.Text & vbCrLf & "Ruta del archivo: " & Ruta
  26.        estado.SelStart = Len(estado.Text)
  27.        nomFile.Text = Ruta
  28.        estado.Text = estado.Text & vbCrLf & "Peso del archivo: " & Peso
  29.        estado.SelStart = Len(estado.Text)
  30.        pesoFile.Text = Peso
  31.        estado.Text = estado.Text & vbCrLf & "Solicitando archivo..."
  32.        estado.SelStart = Len(estado.Text)
  33.        Winsock1.SendData "enviar"
  34.    Else
  35.        If Len(Temporal) <> pesoFile.Text Then
  36.            Temporal = Temporal + Texto
  37.            bytes.Text = Len(Texto)
  38.            numSuma.Text = Val(numSuma.Text) + Val(bytes.Text)
  39.        End If
  40.  
  41.        If numSuma.Text = pesoFile.Text Then
  42.            Open nomFile For Binary As #1
  43.            Put #1, 1, Temporal
  44.            Close #1
  45.            Ruta = ""
  46.            estado.Text = estado.Text & vbCrLf & "El archivo se recibio correctamente..."
  47.            estado.SelStart = Len(estado.Text)
  48.        End If
  49.    End If
  50. End Sub
  51.  

segun yo, el problema esta en la parte de...

Código
  1. Temporal = Temporal + Texto

...pero no estoy ya del todo seguro, si alguien me puede ayudar se los agradeceria muchismp :silbar:


En línea

cobein


Desconectado Desconectado

Mensajes: 759



Ver Perfil WWW
Re: Problema con codigo!!!
« Respuesta #1 en: 16 Enero 2010, 00:08 am »

Mira sin correr el codigo es dificil saber cual es el problema (si no es algo obvio) pero puede que esto "Temporal = Temporal + Texto" te este dando dolores de cabeza cambia el + por un &.
De igual manera sera mejor que pongas los datos recibidos en el archivo de una, no hay necesidad de usar un buffer.

algo asi:

Código:
            Open nomFile For Binary As #1
            Put #1, lof(1)+1, Texto
            Close #1


En línea

http://www.advancevb.com.ar
Más Argentino que el morcipan
Aguante el Uvita tinto, Tigre, Ford y seba123neo
Karcrack es un capo.
Nemutagk

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: Problema con codigo!!!
« Respuesta #2 en: 16 Enero 2010, 00:41 am »

Gracias, ya intente cambiando el + por el &, pero no funciono, ahora intentare lo que comentas, muchas gracias por tu ayuda  ;-)

------

Bueno, eh modificado el codigo como me comentaste, sin la utilizacion de "buffer"y funciono a la perfeccion, solo me quedo una duda, esto en alguna ocacion podria generar archivos corruptos (por paquetes perdidos o algo asi =P), de nuevo muchas gracias!!!!
« Última modificación: 16 Enero 2010, 00:57 am por Nemutagk » En línea

cobein


Desconectado Desconectado

Mensajes: 759



Ver Perfil WWW
Re: Problema con codigo!!!
« Respuesta #3 en: 16 Enero 2010, 01:07 am »

Si, eso puede pasar con o sin buffer, lo unico que podes hacer es cuando mandas los datos del archivo es mandar un checksum (crc32,md5,etc) para aseguararte que no este corrupto el arhivo.

Teoricamente el protocolo tendria que asegurar la llegadas de todos los paquetes, pero en VB esto no pasa siempre, ocasionalmente se pierden  paquetes, mas que nada cuando se utilizan multiples sockets.

PD: podrias mirar el codigo que posteo Leandro hace unos dias para guardar la imagen en JPG asi te ahorras unos cuantos bytes en la transferencia.
En línea

http://www.advancevb.com.ar
Más Argentino que el morcipan
Aguante el Uvita tinto, Tigre, Ford y seba123neo
Karcrack es un capo.
Nemutagk

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: Problema con codigo!!!
« Respuesta #4 en: 16 Enero 2010, 01:11 am »

Muchisimas gracias Cobein, ahora mismo checare el mensaje de Leandro, sobre lo que comentas de los paquetes perdidos tienes razon, despues de que modifique el post anterior cai en que eso es independiente del buffer, asi que con o sin el puede suceder, de nuevo muchisimas gracias!!!! ;-)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[C] Problema GNUPlot con código C
Programación C/C++
valen7valverde 0 2,338 Último mensaje 8 Mayo 2020, 04:31 am
por valen7valverde
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines