Oppure

Loading
17/02/10 18:27
carant
Salve a tutti,
nel mio programma dovrei inviare un file (direttamente con i socket), questo è il codice che ho usato per inviare il file:
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:


 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.
aaa
17/02/10 20:35
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 17/02/10 20:39
18/02/10 18:25
carant
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:):)
aaa
18/02/10 18:28
E come ti accorgi che si blocca la for?

Hai provato ad inserire delle istruzioni per visualizzare il valore di Block ?
18/02/10 19:07
carant
ho inserito il breakpoint e ho visto che si bloccava ancora prima di inviare... Potresti indicarmi un altro modo se esiste?
aaa
18/02/10 19:09
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?
18/02/10 19:11
carant
potresti spiegarmi come si fa perchè non lo so fare?
aaa
18/02/10 19:16
Usa Console.WriteLine