Oppure

Loading
01/04/13 15:24
Hackaos
Buongiorno,
studiando le guide sui sockets di questo sito, girovagando un po su google e leggendo le varie domande degli utenti, ho capito come funzionano questi sockets.
Riesco senza problemi ad inviare file in locale, ma sul remoto ho qualche problema...

per inviare uso questo codice ( ricavato dalla guida sui sockets):
Dim Reader As New IO.FileStream(filename, IO.FileMode.Open)
        Dim Size As Int64 = FileLen(filename)
        Dim Bytes(4095) As Byte
        If Size > 4096 Then
            For Block As Int64 = 0 To Size Step 4096
                If flusso.CanWrite Then
                    If Size - Block >= 4096 Then
                        Reader.Read(Bytes, 0, 4096)
                        flusso.Write(Bytes, 0, 4096)
                    Else
                        Reader.Read(Bytes, 0, Size - Block)
                        flusso.Write(Bytes, 0, Size - Block)
                    End If
                End if
            Next
        Else
            Reader.Read(Bytes, 0, Size)
            flusso.Write(Bytes, 0, Size)
        End If
        Application.DoEvents()
        Reader.Close()
        send("END")
    End Sub


Ricezione file:

prgProgress.Maximum = 100
                prgProgress.Minimum = 0
                Dim Stream As New IO.FileStream(FileName, IO.FileMode.Create)
                aggiornaStato("File in arrivo...")
                Dim Index As Int64 = 0
                Application.DoEvents()
                Do
                    If Client.Available > 0 Then
                        tempo.Start()
                        Dim Bytes(Client.Available - 1) As Byte
                        Dim text As String = ASCII.GetString(Bytes)
                        If text.Contains("END") Or Index >= FileSize Then
                            Exit Do
                        End If
                        flusso(TextBox2.Text).Read(Bytes, 0, Bytes.Length)
                        Stream.Write(Bytes, 0, Bytes.Length)
                        Index += 4096
                        prgProgress.Value = (Index * 100 / FileSize)
                    End If
                Loop
                aggiornaStato("File ricevuto...")
                Stream.Close()
                Application.doevents()


Ripeto che in locale va tutto bene, i file sono sani e funzionanti; ma il problema si pone in remoto... i file inviati risultano danneggiati parzialmente... per esempio le immagini sono visibili parzialmente e infatti confrontando i byte delll'immagine inviata con quelli della ricevuta si nota subito come molti byte sono sostituiti da spazi vuoti!! come se parte dei byte si perdessero strada facendo...

Non capisco il perche di tutto ciò, quindi mi rivolgo a voi :) Attendo con anzia una vostra risposta

Saluti e una buona pasqua,

Hackaos
Ultima modifica effettuata da Hackaos 02/04/13 13:23
aaa
02/04/13 19:40
Saik
per remoto cosa intendi? due computer sulla stessa lan o collegati ad internet? comunque prova ad inserire un sistema di verifica all'interno dei codici per ogni blocco inviato cosi' dovrebbe essere piu' facile capire cosa non va :D
aaa
02/04/13 20:54
Hackaos
Ho provato sia in lan sia con 2 pc su internet.
Sistema di verifica dici... mmm... qualche suggerimento?
aaa
04/04/13 13:43
Saik
Beh potresti inserire delle msgbox che ti aiutino a controllare se il pacchetto è stato ricevuto per intero.
p.s:Se provi a inviare il file senza spezzettarlo in pacchetti ti da lo stesso errore?
aaa
04/04/13 19:11
Hackaos
No no tutto risolto :) il codice va perfettamente, il problema stava da tutt'altra parte.

Comunque ti ringrazio ugualmente per aver risposto alla domanda :)
aaa
04/04/13 20:09
Saik
Di niente :D
aaa