11/06/08 18:36
feddur
Postato originariamente da gantonio:
Comincio a non capire ...
Come hai fatto a vedere che il file spedito era di 33k e ricevuto da 39k?
Ma tu il codice del server per ricevere ce l'hai?
ho visto le proprità dei due file.
questo è il codice che ho provato, purtoppo non l'ho fatto io perchè ancora non ci riesco, spero di imparare.
Private Sub client_DataArrival(ByVal bytesTotal As Long)
Dim data As String, Dimensione As Double
client.GetData data
If InStr(data, "dimensione") Then
tempo = True
Label3.Caption = "Trasferimento..."
Dimensione = Replace(data, "dimensione-", "")
Open App.Path & "/" & "foto.bmp" For Binary Access Write As #2
ElseIf data = "fine" Then
Label3.Caption = "Trasferito"
Close #2
client.SendData "invia"
Label3.Caption = "Richiesta trasferimento"
Else
Put 2, , data
End If
End Sub
Ultima modifica effettuata da feddur 11/06/08 18:37
aaa
11/06/08 18:49
P4p3r0g4
ti faccio uno schema
A server
B client
(B vole trasmettere il file ad A)
utente avvia il processo di invio
B immagazzina il percorso del file
B apre il file
B legge la lunghezza del file
B (se non l'ha gia` fatto) si connette ad A
B trasmette ad A "nomefile" & carattereseparatore & lunghezzafile
A riceve
A divide la stringa in nomefile e lungezzafile
A treamette a B "messaggio ricevuto"
B riceve
B inizia a inviare pezzi di file
A riceve e immagazzina la lunghezza dei dati ricevuti
B invia
A riceve e somma la lunghezza a quella precedente
..
--
..
B invia l'ultima strina e chiude il file
A riceve e somma
A nota che la lunghezza ha raggiunto la lunghezza complessiva del file
A chiude il file
Invio completato!
aaa
11/06/08 19:12
feddur
non capisco come posso dividere il file e inviarlo a pezzi.
scusate, ma vorrei proprio imparare a inviare file.
edit:
posso prendere spunto da questo?
Dim DataToSend As String
Open Filepath For Binary As #1
DataToSend = Space(4000)
For Conteggio = 0 To CLng(LOF(1) / 4000)
Get #1, Conteggio * CLng(4000) + 1, DataToSend
wsk.SendData DataToSend
DoEvents
Next Conteggio
Ultima modifica effettuata da feddur 11/06/08 19:40
aaa
12/06/08 7:50
GrG
Il file viene già spezzettato di suo...Cioè è già il programma CLIENT che divide il file in pezzi se troppo grosso e lo invia al SERVER.
Infatti il winsock invia dei pacchetti al server contenenti il codice del file da trasferire ma il pacchetto più di una certa quantità di Byte non può mandare e così anzichè uno solo ne vengono mandati più di uno ognuno contenenti un pezzo di codice...
aaa
12/06/08 9:19
feddur
c'è un modo per sapere in quanti perti spezzetta un file?
aaa
12/06/08 10:07
gantonio
Calma ... il Winsock (e il TCP) spezzano il file quando lo inviano se tu glielo mandi tutto ... (fattibile ma per grandi file hai la necessita' di allocare molta memoria e non e' conveniente).
La divisione del file di cui si parla e' "applicativa" ... quel codice sarebbe corretto, tranne per il fatto che un file non e' mai perfettamente divisibile e l'ultimo pezzo puo' essere di diversa lunghezza e bisogna tenerne conto.
Per esempio, se il file e' lungo 109288 byte e lo divido in pezzi da 4000 byte, ne avro'
27 pezzi da 4000 byte
+
1 pezzo finale da 1288 byte
Se il codice non ne tien conto, rischia di inviare piu' byte del necessario o di perdersi un pezzo di file. In questo modo la dimensione del file inviato e di quello ricevuto potrebbero essere diverse.
aaa