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

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  [Solucionado] Error al guardar datos binarios
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Solucionado] Error al guardar datos binarios  (Leído 2,637 veces)
Sancho.Mazorka


Desconectado Desconectado

Mensajes: 480


Gamer & Programador


Ver Perfil WWW
[Solucionado] Error al guardar datos binarios
« en: 25 Octubre 2010, 08:47 am »

Hola muchach@s, esto es el evento ws_DataArrival de mi aplicacion, envio un GET para obtener esta imagen (puse el link)

http://us.sapphiretech.com/gm/images/contentLib/icon/ATI%20Stream%20Technology_20091112_3001.gif

La porcion de code que puse aca es la que me trae problemas, veran que es mucho source, pero la mitad es para recibir chunked data, y la otra parte, para recibir los datos enteros (es la que estoy usando para recibir la imagen)

Cuando abro el archivo para escribir el gif que descargue, le agrega 2 caracteres al principio que no se de donde salen, porque hice un Debug.Print(sSplitMensaje(1).Length) y me da el mismo valor que la cabecera Content-Length. Y ese es mi problema, no puedo guardar bien el archivo debido a esos 2 caracteres extra  :-\

Visual Basic .NET 2008

Código
  1. Private Sub ws_DataArrival(ByVal sender As Object, ByVal e As AxMSWinsockLib.DMSWinsockControlEvents_DataArrivalEvent) Handles ws.DataArrival
  2.  
  3.        Dim sBufferMensaje As String = ""
  4.        Dim sChunk() As String
  5.  
  6.        Dim sJoinChunk As String = ""
  7.        Dim lChunkBytes As Long = 0
  8.        Dim sTemp As Char = ""
  9.        Dim sTempJoin As String = ""
  10.        Dim unir As New System.Text.StringBuilder
  11.  
  12.        Static bProcHeader As Boolean = False
  13.        Static sMensaje As String = ""
  14.        Static sSplitMensaje(2) As String
  15.  
  16.  
  17.        ws.GetData(sBufferMensaje)
  18.        sMensaje += sBufferMensaje
  19.  
  20.        sSplitMensaje = Split(sMensaje, vbCrLf & vbCrLf, 2, CompareMethod.Text)
  21.  
  22.        'Procesando una vez la cabecera
  23.        If bProcHeader = False And sSplitMensaje(1) <> "" Then
  24.            bProcHeader = True
  25.            ProcesarHeader(sSplitMensaje(0))
  26.            Exit Sub
  27.        End If
  28.  
  29.        'Recibiendo partes del mensaje
  30.        If tValHeader.TransEncoding = "chunked" Or tValHeader.TransEncoding = "Chunked" Then
  31.            Do
  32.                sChunk = Split(sSplitMensaje(1), vbCrLf, 2)
  33.                lChunkBytes = Long.Parse(sChunk(0), Globalization.NumberStyles.AllowHexSpecifier)
  34.  
  35.                If sChunk(1).Length >= lChunkBytes Then
  36.                    sJoinChunk = sJoinChunk & sChunk(1).Substring(0, CInt(lChunkBytes))
  37.  
  38.                    '***   Tengo que hacer esto, porque no funciona el sSplitMensaje(1).Remove(0, lChunkBytes + 4 + sChunk(0).Length)   ***
  39.                    unir.Append(sSplitMensaje(1).ToString)
  40.                    unir.Remove(0, lChunkBytes + 4 + sChunk(0).Length)
  41.                    sSplitMensaje(1) = unir.ToString
  42.                Else
  43.                    Exit Sub
  44.                End If
  45.  
  46.            Loop Until lChunkBytes = 0
  47.  
  48.        ElseIf tValHeader.Length <> 0 Then
  49.            If sSplitMensaje(1).Length <> tValHeader.Length Then Exit Sub
  50.        End If
  51.  
  52.        Dim binWriter As New BinaryWriter(File.Open("C:\Archivo.gif", FileMode.Create, FileAccess.Write), System.Text.Encoding.Default)
  53.  
  54.        If tValHeader.Length = 0 Then
  55.            binWriter.Write(sJoinChunk)
  56.        Else
  57.            binWriter.Write(sSplitMensaje(1))
  58.        End If
  59.        binWriter.Flush()
  60.        binWriter.Close()
  61.  
  62. End Sub

Si alguno quiere el source completo, avise y lo subo para que prueben.

Saludos, Sancho.Mazorka    :¬¬


« Última modificación: 26 Octubre 2010, 02:34 am por Sancho.Mazorka » En línea

Ganador Xeon Web Server ! ! !    Sancho.Mazorka :D
http://foro.elhacker.net/index.php/topic,171903.75.html


Sancho.Mazorka


Desconectado Desconectado

Mensajes: 480


Gamer & Programador


Ver Perfil WWW
Re: Error al guardar datos binarios
« Respuesta #1 en: 26 Octubre 2010, 02:34 am »

PROBLEMA RESUELTO

Al guardar de manera binaria el contenido del mensaje (el cual era una imagen), agregaba 2 bytes al principio que no se que eran, probe guardando de manera normal y se soluciono

Con este tira error
Código
  1. Dim binWriter As New BinaryWriter(File.Open("C:\Archivo.gif", FileMode.Create, FileAccess.Write), System.Text.Encoding.Default)

Con este funciona de maravillas
Código
  1. Dim Writer as New StreamWriter("C:\Archivo.gif", False, System.Text.Encoding.Default)


Saludos, Sancho.Mazorka    :¬¬


En línea

Ganador Xeon Web Server ! ! !    Sancho.Mazorka :D
http://foro.elhacker.net/index.php/topic,171903.75.html


BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: [Solucionado] Error al guardar datos binarios
« Respuesta #2 en: 26 Octubre 2010, 04:05 am »

.
como dato esto:

Código
  1.  
  2. sMensaje += sBufferMensaje
  3.  
  4.  

No he vuelto ausar .Net pero me parece que quedaria mejor asi no?

Código
  1.  
  2. sMensaje &= sBufferMensaje
  3.  
  4.  

solo para evitar sumas de valores no deseados... vb es canijo es estas cosas...

Dulce Infierno Lunar!¡.
.
En línea

The Dark Shadow is my passion.
Sancho.Mazorka


Desconectado Desconectado

Mensajes: 480


Gamer & Programador


Ver Perfil WWW
Re: [Solucionado] Error al guardar datos binarios
« Respuesta #3 en: 26 Octubre 2010, 04:12 am »

Sisi, eso ya lo corregi, para subir una version mas limpia modifique el original pero sin cambiar lo importante. Sumar o concatenar strings VB lo maneja bien, siempre y cuando no mezcles tipos de dato. Y no, ese no era el problema, porque sin modificar el codigo, cambie la linea que muestro arriba y funciono bien :S

Saludos, Sancho.Mazorka    :¬¬
En línea

Ganador Xeon Web Server ! ! !    Sancho.Mazorka :D
http://foro.elhacker.net/index.php/topic,171903.75.html


Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines