carant (Normal User)
Pro
Messaggi: 69
Iscritto: 08/11/2009
|
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 |
Public Sub sendfile(ByVal s As String, ByVal socket As System.Net.Sockets.Socket) If System. IO. File. Exists(s ) Then Dim size As Int64 = FileLen(s) Dim bytes(4095) As Byte Dim reader As New IO.FileStream(s, IO.FileMode.Open) If size > 4096 Then For Block As Int64 = 0 To size Step 4096 'Se i bytes rimanenti sono più di 4096, 'ne legge un blocco intero If size - Block >= 4096 Then reader.Read(bytes, 0, 4096) Else 'Altrimenti un blocco più piccolo reader.Read(bytes, 0, size - Block) End If socket.Send(bytes) Threading.Thread.Sleep(30) Next Dim buffer As Byte() buffer = System.Text.Encoding.ASCII.GetBytes("END") socket.Send(buffer) End If End If End Sub
|
e questo per la ricezione, con un timer che controlla se c'è qualcosa da ricevere:
Codice sorgente - presumibilmente VB.NET |
Public Sub timertick() Handles timer.Tick If s.Available > 0 Then Do Dim a As Integer a = s.ReceiveBufferSize Dim b(a) As Byte Dim msg As Integer msg = s.Receive(b) Dim str As String str = System.Text.Encoding.ASCII.GetString(b) If str.Contains("END") Then Exit Do End If Dim stream As New IO.FileStream(stimer, IO.FileMode.Create) stream.Write(b, 0, 4096) Loop End If End Sub
|
l'applicazione si blocca e non esce neanche il debug.
(Ho seguito la guida di totem)
Ciao.
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6403
Iscritto: 03/01/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à. |
|
carant (Normal User)
Pro
Messaggi: 69
Iscritto: 08/11/2009
|
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
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6403
Iscritto: 03/01/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à. |
|
carant (Normal User)
Pro
Messaggi: 69
Iscritto: 08/11/2009
|
ho inserito il breakpoint e ho visto che si bloccava ancora prima di inviare... Potresti indicarmi un altro modo se esiste?
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6403
Iscritto: 03/01/2010
|
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à. |
|
carant (Normal User)
Pro
Messaggi: 69
Iscritto: 08/11/2009
|
potresti spiegarmi come si fa perchè non lo so fare?
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6403
Iscritto: 03/01/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à. |
|
carant (Normal User)
Pro
Messaggi: 69
Iscritto: 08/11/2009
|
vuoi dire di usare writeline per capire dove si femra... o sbaglio??
|
|