Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Perdita di byte in trasferimento client-server
Forum - C# / VB.NET - Perdita di byte in trasferimento client-server

Avatar
-jacopo- (Normal User)
Rookie


Messaggi: 28
Iscritto: 29/01/2008

Segnala al moderatore
Postato alle 12:39
Mercoledì, 19/03/2008
Ciao! devo trasferire un file da un pc ad un altro.
Inizio inviando i byte in uno stream così:
Codice sorgente - presumibilmente C# / VB.NET

  1. Dim bytes2 As Object = file.ReadAllBytes(origine.Text)
  2. NetStr.Write(bytes2, 0, bytes2.Length)



E li ricevo così:
Codice sorgente - presumibilmente VB.NET

  1. Dim data(1) As Byte
  2. Dim s2 As New MemoryStream
  3.  
  4. While Client.Available > 0
  5.     Dim nws As NetworkStream = Client.GetStream
  6.     Dim bytesRead As Integer = nws.Read(data, 0, data.LongLength)
  7.     s2.Write(data, 0, bytesRead)
  8.  
  9. Dim Bytes(s2.Length - 1) As Byte
  10. s2.Read(Bytes, 0, Bytes.Length)
  11. IO.File.WriteAllBytes(percorso.Text, Bytes)



Il nuovo file però presenta una perdita di byte, ad esempio una canzone di 4,71 mega è diventata di 4,7. Qualcuno sa dirmi perché???
Grazie

Ultima modifica effettuata da -jacopo- il 19/03/2008 alle 12:41
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 18:35
Mercoledì, 19/03/2008
Forse perchè dichiari Data come un array di 2 bytes?

PM Quote
Avatar
-jacopo- (Normal User)
Rookie


Messaggi: 28
Iscritto: 29/01/2008

Segnala al moderatore
Postato alle 17:31
Venerdì, 21/03/2008
quindi dovrei mettere Dim data(0) As Byte ?

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 8:26
Sabato, 22/03/2008
No, data deve assumere la lunghezza del Network Stream, altrimenti come fai a copiare tutti i dati? Devi quindi dichiararlo senza dimensioni e poi ridimensionarlo con ReDim, una volta letto il numero di bytes contenuti nel file.

PM Quote
Avatar
-jacopo- (Normal User)
Rookie


Messaggi: 28
Iscritto: 29/01/2008

Segnala al moderatore
Postato alle 12:17
Sabato, 22/03/2008
Testo quotato

Postato originariamente da Il Totem:

No, data deve assumere la lunghezza del Network Stream, altrimenti come fai a copiare tutti i dati?



è in un ciclo while e quindi li dovrebbe copiare tutti!
Infatti se uso lo stesso metodo per una immagine da picturebox a picturebox funziona perfettamente

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 15:32
Domenica, 23/03/2008
Allora deve funzionare, non può andare solo certe volte. Il file musicale risulta danneggiato? Altrimenti potrebbe essere solo un'approssimazione.

PM Quote
Avatar
-jacopo- (Normal User)
Rookie


Messaggi: 28
Iscritto: 29/01/2008

Segnala al moderatore
Postato alle 13:17
Mercoledì, 26/03/2008
risulta danneggiato purtroppo, ho provato anche con altri file, tipo exe ma tutti sono danneggiati e con alcuni byte in meno

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 16:57
Giovedì, 27/03/2008
Prova a correggere il codice in questo modo:
Codice sorgente - presumibilmente VB.NET

  1. If Client.Available > 0 Then
  2.     Dim nws As NetworkStream = Client.GetStream
  3.     Dim bytesToRead(Client.Avaiable - 1) As Byte
  4.     nws.Read(bytesToRead, 0, bytesToRead.Length)
  5.    
  6.     IO.File.WriteAllBytes(percorso.Text, BytesToRead)
  7. End If


Ultima modifica effettuata da Il Totem il 27/03/2008 alle 16:59
PM Quote