Oppure

Loading
12/06/08 11:57
feddur
Postato originariamente da GrG:

Postato originariamente da feddur:
[...]
per ricevere come potrei fare?
basta mettere insieme tutte le parti e attendere il segnale per chiudere il file?


All'ultimo pacchetto verranno aggiunti in coda al codice degli spazi..e così il file ricevuto sarà più grande del file inviato...Però funzionerà lo stesso


quindi l'ultimo pacchetto deve essere di:

lof - ( (lof/4000) -1 ) * 4000

vero? :D
comincio a capirci qualcosa.. :rotfl:
aaa
12/06/08 13:23
gantonio
Postato originariamente da GrG:
All'ultimo pacchetto verranno aggiunti in coda al codice degli spazi..e così il file ricevuto sarà più grande del file inviato...Però funzionerà lo stesso


Non solo non e' una cosa bella ... ma non e' neanche detto che il file "funzioni" ... puo' essere se parliamo di certi tipi di file, puo' NON funzionare per altri tipi ...

In ogni caso, non mi sembra che sia un compito cosi' DIFFICILE da non potere calcolare il resto di una divisione e inviare il corretto numero di byte che compongono il file ...! Andiamo ... !
aaa
12/06/08 14:11
feddur
Postato originariamente da gantonio:

Postato originariamente da GrG:
All'ultimo pacchetto verranno aggiunti in coda al codice degli spazi..e così il file ricevuto sarà più grande del file inviato...Però funzionerà lo stesso


Non solo non e' una cosa bella ... ma non e' neanche detto che il file "funzioni" ... puo' essere se parliamo di certi tipi di file, puo' NON funzionare per altri tipi ...

In ogni caso, non mi sembra che sia un compito cosi' DIFFICILE da non potere calcolare il resto di una divisione e inviare il corretto numero di byte che compongono il file ...! Andiamo ... !


Hai ragione..
Anche se sbagliato vi posto quello che sono riuscito a fare, magari insieme riuscuamo a sistemarlo..
Ancora non so come inviare l'ultimo pezzo..

ecco quello che sono riuscito a fare..

Private Sub client_DataArrival(ByVal bytesTotal As Long)
    Dim data As String
    client.GetData data
                
    Open App.Path & "/" & "foto.bmp" For Binary As #1
    
    While data <> "fine"
        Put #1, , data
        Label3.Caption = "Trasferimento..."
    Wend

   If data = "fine" Then Close #1
End Sub



Private Function inviaimmagine()

Dim DataToSend As String
Dim Conteggio As Long
Dim pezzi As Long

Open App.Path & "\webcam" & "\temp.bmp" For Binary As #1
DataToSend = Space(4000)
pezzi = LOF(1) / 4000

    For Conteggio = 0 To CLng(LOF(1) / 4000)
        Get #1, Conteggio * CLng(4000) + 1, DataToSend
        server.SendData DataToSend
        DoEvents
    Next Conteggio
    
    If contegio = pezzi Then
        server.SendData "fine"
        Close #1
    End If
    
End Function


ogni aiuto è ben accettato.. :asd:
aaa
12/06/08 14:30
gantonio
Ma no ... l'invio dovrebbe essere qualcosa del genere

Private Function inviaimmagine()

    Const PLEN = 4000
    
    Dim DataToSend As String
    Dim flen As Long
    Dim pezzi As Long
    Dim resto As Long
    Dim cnt As Long
    
    DataToSend = Space(PLEN)
    
    Open App.Path & "\tuofile.bmp" For Binary As #1
    
    Server.SendData "###INIZIO###"
    
    flen = LOF(1)
    pezzi = flen \ PLEN
    resto = flen Mod PLEN
    
    For cnt = 1 To pezzi
        Get #1, , DataToSend
        Server.SendData DataToSend
    Next cnt
     
    If resto > 0 Then
        DataToSend = Space(resto)
        Get #1, , DataToSend
        Server.SendData DataToSend
    End If

    Server.SendData "###FINE###"
    Close #1
End Function


e la ricezione non dovrebbe essere difficile ...
aaa
12/06/08 15:22
GrG
Io per mandare files uso questo codice:
Client che riceve le parti di codice dal server:
Private Sub Winsock2_DataArrival(ByVal bytesTotal As Long)
'{Ricevimento file}
Dim data As String
Dim I As Integer

Winsock2.GetData data
txtDialogo.Text = ""
If data = "Fine150A" Then
Winsock2.Close
Close #3
MsgBox "Trasferimento Completato"
Exit Sub
Else
If bl = True Then
Open App.Path & "\FILE" For Binary As #3
bl = False
data = Replace(data, "Fine150A", "")
End If
Put #3, , data

End If
End Sub


Il codice del server che manda i pezzi di file al Client è:



Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim data As String
Dim P As Integer
On Error GoTo ErrorProgr
Winsock1.GetData data
Path(P) = "PERCORSO"
Dim SentData As String
Dim conteggio As Long
If var = True Then
Open Path(P) For Binary As #2
DoEvents
SentData = Space(1000)
For conteggio = 0 To CLng(LOF(2) / 1000)
Get #2, conteggio * CLng(1000) + 1, SentData
Winsock2.SendData SentData
DoEvents
Next conteggio
var = False
DoEvents
Close #2
Winsock2.SendData "Fine150A"
MsgBox "Trasferimento Completato!"
End If
'---------------------
End If
Loop Until EOF(1) = True
Close #1
End If
ErrorProgr:
If Err.Description = "" Then
Else
MsgBox "Errore: " & Err.Description
End If
End Sub


Se non lo capisci te lo spiego...Cmq alla fine il file ricevuto è più grande del file di origine
Ultima modifica effettuata da GrG 12/06/08 15:26
aaa
12/06/08 19:12
feddur
Grazie, ma così facendo non torna il problema dell'EOF?

Mi studio un po' gli schemi proposti da voi, mi farò sentire..

Grazie ancora!
aaa
13/06/08 7:24
GrG
LOF lo dovresti usare nel programma che RICEVE il FILE...Per vedere se la grandezza del file ha raggiunto la grandezza che il programma che MANDA il file gli aveva mandato all'inizio...

Io uso EOF nel programma per MANDARE il file. EOF Lo uso per dirgli fino a quando è finito il file. Italianizzato sarebbe così:

[...]
loop until EOF(1) = True
close #1
------------------------
ITALIANO:

[...]
Esegui il codice sopra finchè non finisce il file altrimenti:
Chiudi il file.

Ultima modifica effettuata da GrG 13/06/08 7:26
aaa
13/06/08 8:52
gantonio
Gregorio ... l'EOF NON deve essere usato per un file binario perche' avresti sicuramente problemi.

Un file binario va letto calcolando la sua lunghezza con la LOF UNA SOLA VOLTA, e leggendo con la Get ...

Dal lato della ricezione NON è necessario usare la LOF in quanto il numero di byte ricevuti li metti in una variabile e controlli QUELLA variabile.

Ma e' cosi' difficile ragazzi?
aaa