none
Transferencia de arquivos via TCPClient RRS feed

  • Pergunta

  • Olá a todos, estou quebrando a cabeça faz uma semana com um código... 

    Tenho um client e um servidor, que se comunicam entre si pela porta 15963

    Consigo me comunicar para troca de textos, ou seja, um bate-papo.

    O código para envio é assim:

    (PS: |SP| é o separador)

    C.Send("TEXTO" & |SP| & cmptxt.text)
    
    


    ao receber, ele irá separar em A(0) E A(1) (0 = CASE do texto, 1 = TEXTO)

    Porém, ao tentar enviar arquivos, eu tentei de varias formas, ate mesmo um código que criei para um software de backup meu:

    Try
                Dim source = IO.File.Open(loadr, IO.FileMode.Open)
    
                Dim bytesToRead As Integer = 1024
                Dim bytesReaded As Integer = 0
                Dim percent As Integer = 0
                Dim totalBytesReaded As Int64 = 0
                Dim tamanho As Integer = 0
    
    
                While True
    
    
    
                    If (source.Length - source.Position) < 1023 Then
    
                        tamanho = (source.Length - source.Position) - 1
    
    
                        If tamanho < 0 Then
    
                            tamanho = 0
    
                        End If
    
                        bytesToRead = tamanho + 1
    
                    Else
    
                        tamanho = 1023
    
                    End If
    
    
                    Dim buffer(tamanho) As Byte
    
                    bytesReaded = source.Read(buffer, 0, bytesToRead)
    
    
                    If bytesReaded = 0 Then
    
                        source.Close()
    
                        Exit While
                    Else
    
    
                        totalBytesReaded += bytesReaded
    
    
                        C.Send("DOWNLOAD" & Yy & "ARQUIVO" & Yy & System.Text.ASCIIEncoding.ASCII.GetString(buffer))
    
    
                        C.Send("DOWNLOAD" & Yy & "PORCENTAGEM" & Yy & (totalBytesReaded / source.Length) * 100 & Yy & Path.GetFileName(loadr))
    
                        Thread.Sleep(1)
    
    
                    End If
    
    
                End While
            Catch ex As Exception
    
                C.Send("VESH" & Yy & ex.Message)
                
            End Try

    Mas todos os arquivos enviados dessa forma acabam chegando corrompidos.

    Já tentei usar o mesmo codigo, enfileirando cada buffer que chegava em ordem de um array, e logo depois juntando este array e transformando em bytes e escrevendo, mas ainda dá no mesmo. 

    Alguma dica?

    quarta-feira, 22 de abril de 2015 03:57

Respostas

  • Bem... já consegui resolver. Esperava que alguém desse outra dica, mas enfim.

    Caso alguém se interesse...

    Troquei o

    C.Send("DOWNLOAD" & Yy & "ARQUIVO" & Yy & System.Text.ASCIIEncoding.ASCII.GetString(buffer))
    


    Por

    C.Send("DOWNLOAD" & Yy & "ARQUIVO" & Yy & Convert.ToBase64String(buffer))
    

    • Marcado como Resposta Jean Kassio quinta-feira, 23 de abril de 2015 12:50
    quinta-feira, 23 de abril de 2015 12:50