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

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
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 ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
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:):)

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
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 ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
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?

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
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 ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
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?

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
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 ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
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??

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo