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
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.