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
Private Sub ws_DataArrival(ByVal sender As Object, ByVal e As AxMSWinsockLib.DMSWinsockControlEvents_DataArrivalEvent) Handles ws.DataArrival
Dim sBufferMensaje As String = ""
Dim sChunk() As String
Dim sJoinChunk As String = ""
Dim lChunkBytes As Long = 0
Dim sTemp As Char = ""
Dim sTempJoin As String = ""
Dim unir As New System.Text.StringBuilder
Static bProcHeader As Boolean = False
Static sMensaje As String = ""
Static sSplitMensaje(2) As String
ws.GetData(sBufferMensaje)
sMensaje += sBufferMensaje
sSplitMensaje = Split(sMensaje, vbCrLf & vbCrLf, 2, CompareMethod.Text)
'Procesando una vez la cabecera
If bProcHeader = False And sSplitMensaje(1) <> "" Then
bProcHeader = True
ProcesarHeader(sSplitMensaje(0))
Exit Sub
End If
'Recibiendo partes del mensaje
If tValHeader.TransEncoding = "chunked" Or tValHeader.TransEncoding = "Chunked" Then
Do
sChunk = Split(sSplitMensaje(1), vbCrLf, 2)
lChunkBytes = Long.Parse(sChunk(0), Globalization.NumberStyles.AllowHexSpecifier)
If sChunk(1).Length >= lChunkBytes Then
sJoinChunk = sJoinChunk & sChunk(1).Substring(0, CInt(lChunkBytes))
'*** Tengo que hacer esto, porque no funciona el sSplitMensaje(1).Remove(0, lChunkBytes + 4 + sChunk(0).Length) ***
unir.Append(sSplitMensaje(1).ToString)
unir.Remove(0, lChunkBytes + 4 + sChunk(0).Length)
sSplitMensaje(1) = unir.ToString
Else
Exit Sub
End If
Loop Until lChunkBytes = 0
ElseIf tValHeader.Length <> 0 Then
If sSplitMensaje(1).Length <> tValHeader.Length Then Exit Sub
End If
Dim binWriter As New BinaryWriter(File.Open("C:\Archivo.gif", FileMode.Create, FileAccess.Write), System.Text.Encoding.Default)
If tValHeader.Length = 0 Then
binWriter.Write(sJoinChunk)
Else
binWriter.Write(sSplitMensaje(1))
End If
binWriter.Flush()
binWriter.Close()
End Sub
Si alguno quiere el source completo, avise y lo subo para que prueben.
Saludos, Sancho.Mazorka :¬¬
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
Dim binWriter As New BinaryWriter(File.Open("C:\Archivo.gif", FileMode.Create, FileAccess.Write), System.Text.Encoding.Default)
Con este funciona de maravillas
Dim Writer as New StreamWriter("C:\Archivo.gif", False, System.Text.Encoding.Default)
Saludos, Sancho.Mazorka :¬¬
.
como dato esto:
sMensaje += sBufferMensaje
No he vuelto ausar .Net pero me parece que quedaria mejor asi no?
sMensaje &= sBufferMensaje
solo para evitar sumas de valores no deseados... vb es canijo es estas cosas...
Dulce Infierno Lunar!¡.
.
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 :¬¬