Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicitÓ e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [VB.NET] Invio di un file
Forum - C# / VB.NET - [VB.NET] Invio di un file

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
carant (Normal User)
Pro


Messaggi: 69
Iscritto: 08/11/2009

Segnala al moderatore
Postato alle 19:27
Mercoledý, 17/02/2010
Salve a tutti,
nel mio programma dovrei inviare un file (direttamente con i socket), questo Ŕ il codice che ho usato per inviare il file:
Codice sorgente - presumibilmente VB.NET

  1. Public Sub sendfile(ByVal s As String, ByVal socket As System.Net.Sockets.Socket)
  2.         If System.IO.File.Exists(s) Then
  3.             Dim size As Int64 = FileLen(s)
  4.             Dim bytes(4095) As Byte
  5.             Dim reader As New IO.FileStream(s, IO.FileMode.Open)
  6.             If size > 4096 Then
  7.                 For Block As Int64 = 0 To size Step 4096
  8.                     'Se i bytes rimanenti sono pi¨ di 4096,
  9.                     'ne legge un blocco intero
  10.                     If size - Block >= 4096 Then
  11.                         reader.Read(bytes, 0, 4096)
  12.                     Else
  13.                         'Altrimenti un blocco pi¨ piccolo
  14.                         reader.Read(bytes, 0, size - Block)
  15.                     End If
  16.                     socket.Send(bytes)
  17.                     Threading.Thread.Sleep(30)
  18.                 Next
  19.                 Dim buffer As Byte()
  20.                 buffer = System.Text.Encoding.ASCII.GetBytes("END")
  21.                 socket.Send(buffer)
  22.             End If
  23.         End If
  24.     End Sub



e questo per la ricezione, con un timer che controlla se c'Ŕ qualcosa da ricevere:

Codice sorgente - presumibilmente VB.NET

  1. Public Sub timertick() Handles timer.Tick
  2.         If s.Available > 0 Then
  3.             Do
  4.                 Dim a As Integer
  5.                 a = s.ReceiveBufferSize
  6.                 Dim b(a) As Byte
  7.                 Dim msg As Integer
  8.                 msg = s.Receive(b)
  9.                 Dim str As String
  10.                 str = System.Text.Encoding.ASCII.GetString(b)
  11.                 If str.Contains("END") Then
  12.                     Exit Do
  13.                 End If
  14.                 Dim stream As New IO.FileStream(stimer, IO.FileMode.Create)
  15.                 stream.Write(b, 0, 4096)
  16.  
  17.             Loop
  18.         End If
  19.     End Sub


l'applicazione si blocca e non esce neanche il debug.
(Ho seguito la guida di totem)
Ciao.


Antonio
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5557
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 21:35
Mercoledý, 17/02/2010
Si blocca il programma che trasmette o quello che riceve?

EDIT: suppongo quello che riceve ...

Quando riceve il primo blocco, non riceve l'End e quindi non puo' mai uscire dal Do ...
Inoltre, non puoi creare il file ad ogni blocco ricevuto ...
E ci sarebbe tanto da ridire sul metodo dell' End ... se c'e' una stringa "End" all'interno del file, il programma si blocca prima di aver ricevuto tutto il file ...

Ultima modifica effettuata da nessuno il 17/02/2010 alle 21:39


Ricorda che nessuno Ŕ obbligato a risponderti e che nessuno Ŕ perfetto ...
PM Quote
Avatar
carant (Normal User)
Pro


Messaggi: 69
Iscritto: 08/11/2009

Segnala al moderatore
Postato alle 19:25
Giovedý, 18/02/2010
no... il programma si blocca quando deve inviare, l'ho scoperto mettendo dei breakpoint... In pratica si blocca quando fa il ciclo for.
no so perchŔ, se c'Ŕ un altro modo per inviare un file potreste indicarmelo??

Comunque per l'end non c'Ŕ problema, perchŔ il file non Ŕ un file di testo, e comunquq si potrebbe risolvere mettendo = al posto di contains...
Grazie delle risposte:):)


Antonio
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5557
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 19:28
Giovedý, 18/02/2010
E come ti accorgi che si blocca la for?

Hai provato ad inserire delle istruzioni per visualizzare il valore di Block ?


Ricorda che nessuno Ŕ obbligato a risponderti e che nessuno Ŕ perfetto ...
PM Quote
Avatar
carant (Normal User)
Pro


Messaggi: 69
Iscritto: 08/11/2009

Segnala al moderatore
Postato alle 20:07
Giovedý, 18/02/2010
ho inserito il breakpoint e ho visto che si bloccava ancora prima di inviare... Potresti indicarmi un altro modo se esiste?


Antonio
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5557
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 20:09
Giovedý, 18/02/2010
Testo quotato

Postato originariamente da carant:

ho inserito il breakpoint e ho visto che si bloccava ancora prima di inviare... Potresti indicarmi un altro modo se esiste?



Che vuoi dire ? Con il breakpoint si ferma nella linea dove hai inserito il breakpoint ...

Ti ho detto ... hai provato ad inserire delle istruzioni nel ciclo per visualizzare il valore di Block?


Ricorda che nessuno Ŕ obbligato a risponderti e che nessuno Ŕ perfetto ...
PM Quote
Avatar
carant (Normal User)
Pro


Messaggi: 69
Iscritto: 08/11/2009

Segnala al moderatore
Postato alle 20:11
Giovedý, 18/02/2010
potresti spiegarmi come si fa perchŔ non lo so fare?


Antonio
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5557
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 20:16
Giovedý, 18/02/2010
Usa Console.WriteLine


Ricorda che nessuno Ŕ obbligato a risponderti e che nessuno Ŕ perfetto ...
PM Quote
Avatar
carant (Normal User)
Pro


Messaggi: 69
Iscritto: 08/11/2009

Segnala al moderatore
Postato alle 20:19
Giovedý, 18/02/2010
vuoi dire di usare writeline per capire dove si femra... o sbaglio??


Antonio
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo