Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Visual Basic 6 - ancora trasferimento file con winsock, ma con un problema diverso.
Forum - Visual Basic 6 - ancora trasferimento file con winsock, ma con un problema diverso.

Pagine: [ 1 2 3 4 5 ] Precedente | Prossimo
Avatar
feddur (Normal User)
Pro


Messaggi: 200
Iscritto: 06/03/2008

Segnala al moderatore
Postato alle 17:08
Mercoledì, 11/06/2008
Salve, scusate se ci sono altri topic sull'invio file, ma ho un problema diverso.
Vi posto il codice che mi da problemi.

Codice sorgente - presumibilmente Delphi

  1. Open file For Binary Access Read As #1
  2.  server.SendData "dimensione-" & LOF(1)
  3.  Sleep (100)
  4.  DoEvents
  5.  chunk = 4000
  6.  
  7.   Do While Not EOF(1)
  8.      datafile = Space$(chunk)
  9.      Get 1, , datafile
  10.      server.SendData datafile
  11.      DoEvents
  12.   Loop
  13.     Close #1
  14.     Sleep (2000)
  15.     server.SendData "fine"



a quanto ho potuto capire non arriva l'EOF per interropere in ciclo, chiudere il file e indicare dall'altra parte che il trasferimento è finito e che bisogna chiudere il file.
infatti ho creato un pulsante che chiude il file e quando intuisco che il trasferimento è finito lo premo e il file è trasferito completamente.
chi mi sa aiutare?
grazie.

PM Quote
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 17:31
Mercoledì, 11/06/2008
Devi gestire la lunghezza del file.

Con la Lof hai trovato la lunghezza in byte ... la comunichi al server prima di tutto. Poi leggi tanti byte quanti indicati da questa lunghezza e li invii. Il server confrontera' il numero di byte ricevuti con il valore ricevuto all'inizio e chiudera' il file.

PM Quote
Avatar
feddur (Normal User)
Pro


Messaggi: 200
Iscritto: 06/03/2008

Segnala al moderatore
Postato alle 17:35
Mercoledì, 11/06/2008
Testo quotato

Postato originariamente da gantonio:

Devi gestire la lunghezza del file.

Con la Lof hai trovato la lunghezza in byte ... la comunichi al server prima di tutto. Poi leggi tanti byte quanti indicati da questa lunghezza e li invii. Il server confrontera' il numero di byte ricevuti con il valore ricevuto all'inizio e chiudera' il file.



pero' ho notato che i kb ricevuti (39 kb) sono diversi dai kb inviati (33.3kb).

PM Quote
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 17:38
Mercoledì, 11/06/2008
Scusa ... ma io ti ho detto di NON usare l'EOF ma la lunghezza del file ... tu hai corretto il codice?

PM Quote
Avatar
feddur (Normal User)
Pro


Messaggi: 200
Iscritto: 06/03/2008

Segnala al moderatore
Postato alle 17:40
Mercoledì, 11/06/2008
Testo quotato

Postato originariamente da gantonio:

Scusa ... ma io ti ho detto di NON usare l'EOF ma la lunghezza del file ... tu hai corretto il codice?



ah.. allora credo di non aver capito.. 8-|

PM Quote
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 17:47
Mercoledì, 11/06/2008
Il ciclo non lo devi fare con l'EOF (per un file binario non esiste l'EOF).

Devi ottenere la lunghezza in byte e fare un ciclo for in modo da leggere, a pezzi, il file fino alla lunghezza calcolata in precedenza.

PM Quote
Avatar
feddur (Normal User)
Pro


Messaggi: 200
Iscritto: 06/03/2008

Segnala al moderatore
Postato alle 17:57
Mercoledì, 11/06/2008
Testo quotato

Postato originariamente da gantonio:

Il ciclo non lo devi fare con l'EOF (per un file binario non esiste l'EOF).

Devi ottenere la lunghezza in byte e fare un ciclo for in modo da leggere, a pezzi, il file fino alla lunghezza calcolata in precedenza.



ah, bene.
non saprei come leggere la lunghezza dei byte ricevuti.
una volta che si eguagliano le due lunghezze poi posso chiudere il file?

edit:
capito, provo a modificare il codice.

edit:
ho problemi a trovare l'LOF(1) mentre il file è in trasferimento.

vorrei fare una cosa del genere:

while dimensionefile > EOF()
   ....
   continua a scaricare
if dimensione = EOF()
  chiudi file


come idea è giusta?

Ultima modifica effettuata da feddur il 11/06/2008 alle 18:44
PM Quote
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 19:14
Mercoledì, 11/06/2008
Certe volte mi sembra di scrivere in arabo ...

Ti ho appena detto che EOF non va utilizzato e tu fai dei confronti con EOF?

Ti rispiego in modo piu' semplice

1) il client manda la lunghezza del file, ad esempio, 13403

2) il server conserva da qualche parte questo valore

3) il client manda un pezzo del file, ad esempio, 4000 byte

4) il server sa che ha ricevuto 4000 byte e che sono meno dei 13403 e attende il resto

5) il client manda il resto del file e lo chiude

6) il server sa che i byte ricevuti piu' quelli precedenti sono in totale 13403, ovvero quanti se ne aspettava e chiude il file

Okay?

PM Quote
Avatar
feddur (Normal User)
Pro


Messaggi: 200
Iscritto: 06/03/2008

Segnala al moderatore
Postato alle 19:18
Mercoledì, 11/06/2008
Testo quotato

Postato originariamente da gantonio:

Certe volte mi sembra di scrivere in arabo ...

Ti ho appena detto che EOF non va utilizzato e tu fai dei confronti con EOF?

Ti rispiego in modo piu' semplice

1) il client manda la lunghezza del file, ad esempio, 13403

2) il server conserva da qualche parte questo valore

3) il client manda un pezzo del file, ad esempio, 4000 byte

4) il server sa che ha ricevuto 4000 byte e che sono meno dei 13403 e attende il resto

5) il client manda il resto del file e lo chiude

6) il server sa che i byte ricevuti piu' quelli precedenti sono in totale 13403, ovvero quanti se ne aspettava e chiude il file

Okay?



si scusami, ho confuso mentre scivevo eof con lof

PM Quote
Pagine: [ 1 2 3 4 5 ] Precedente | Prossimo