13/06/08 9:07
gantonio
Postato originariamente da GrG:
La variabile dove la metti? Nel lato della ricezione?
La variabile dove la metti? Nel lato della ricezione?
Ovviamente ... all'inizio in ricezione, quando fai la open, la variabile e' a 0 ... man mano che ricevi byte e li scrivi nel file, li aggiungi nella variabile e controlli il suo valore fino a quando non arriva al valore della lunghezza (questo se controlli la lunghezza)
Oppure attendi che arrivi la frase di terminazione (###FINE###) e non usi la variabile ...
aaa
13/06/08 13:05
GrG
Ma alllora, Non va bene come dicevo prima?
Io intendevo(prendendo in considerazione lo schema ab):
a = CLIENT
b = SERVER
a: Chiede a b se gli trasmette un file
b: Gli risponde dicendogli la grandezza del file
a: Si salva la grandezza in una variabile
b:Gli manda i pacchetti contenenti i pezzi del codice del file
a: Li riceve e li aggiunge al file che si sta formando
E a con LOF vede la grandezza del file creato e la mette a confronto con la variabile iniziale. Se il file è più piccolo continua il trasferimento altrimenti chiude la connessione.
Postato originariamente da 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...
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 intendevo(prendendo in considerazione lo schema ab):
a = CLIENT
b = SERVER
a: Chiede a b se gli trasmette un file
b: Gli risponde dicendogli la grandezza del file
a: Si salva la grandezza in una variabile
b:Gli manda i pacchetti contenenti i pezzi del codice del file
a: Li riceve e li aggiunge al file che si sta formando
E a con LOF vede la grandezza del file creato e la mette a confronto con la variabile iniziale. Se il file è più piccolo continua il trasferimento altrimenti chiude la connessione.
aaa
13/06/08 14:12
gantonio
Va tutto bene tranne l'ultima parte.
Il client esegue la LOF una sola volta.
Non c'e' bisogno di eseguirla tante volte nel ciclo. Dal valore della LOF ottiene il numero di volte che deve essere eseguito il ciclo e il numero di byte da inviare come resto.
L'ho scritto anche sopra piu' volte mostrando il codice ... rileggi il mio messaggio ...
Il client esegue la LOF una sola volta.
Non c'e' bisogno di eseguirla tante volte nel ciclo. Dal valore della LOF ottiene il numero di volte che deve essere eseguito il ciclo e il numero di byte da inviare come resto.
L'ho scritto anche sopra piu' volte mostrando il codice ... rileggi il mio messaggio ...
aaa
16/06/08 11:12
GrG
Postato originariamente da GrG:
[...]
Il codice del server che manda i pezzi di file al Client è:
Se non lo capisci te lo spiego...Cmq alla fine il file ricevuto è più grande del file di origine
[...]
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
Scusate se ho ripreso questo vecchio post ma mi sono accorto che nel codice avevo messo un pezzo di un'altro codice x sbaglio, il codice giusto rispetto a quello sopra è:
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 Sub
aaa