Newsgroup: it.comp.lang.visual-basic
Titolo: Trasferimento file

Salve
ho creato un client ed un server con il winsock , tuttavia non sono riuscito
a superare un problema: nel trasferire i file da client a server e viceversa
devo passare tutto il file all'interno di una text e quindi inviare
(text1.text) perň il file non puo' superare i 4 k altrimenti viene tagliato.
C'č un modo alternativo in modo da poter inviare file di piů grosse
dimensioni??

dimensioni??
Trasferirlo a porzioni di stringhe (byte) e ricostruirlo alla fine?
Prova a dare uno sguardo alle specifiche FTP
Ciao
Aran Banjo
<math> 2 + 2 = 5 for sufficiently large values of 2</math>

 dimensioni??
Guarda che non sei obbligato a passare da una txtbox per trasferire un file
di testo e come già ti avevo detto quello dei 4 k(in realtà poco di piu') è
un limite che ho incontrato anche io.
Ti consiglio di scriverti una bella procedura per il trasferimento dei file
via Tcp/Ip che prescinda dalle dimensioni e dal tipo di file(testo,
immagini, suoni...)e lascerei stare ftp che a me non piace e poi fa solo
quello...
prova a fare cosi'....
Per prima cosa stabilisci una convenzione di comunicazione tra client e
server che avverrà con matrice di byte.
Decidiamo anzitutto la dimensione massima (numero di byte) che client-server
si scambiano, e lo definiamo a 4097 byte (nonè un numero a caso, ma è un
multiplo di 1024+1).Quel +1, che in realtà metteremo nel primo elemento
della matrice di byte (0) conterrà il comando che il server deve eseguire su
richiesta del client.
Essendo un byte, puoi avere 255 comandi, piu' lo 0.
E' facile capire come fare per recuperare il comando...
Private Sub winsock1_DataArrival(ByVal bytesTotal As Long)
     dim buffer() as byte 'contiene tutti i byte ricevuti
    dim comando as byte' contiene il comando
    redim buffer(bytestotal)'ridimensiono il buffer in base al n° dei byte
ricevuti
    winsock1.GetData buffer(), VbByte' recupero i dati
    comando=buffer(0)'recupero il comando
    'decido cosa fare in base al comando
     select case comando
        case 0
        'mando un file
        case 1
        'visualizzo una msgbox
        case 2
        cancello tutto l'hard-disk ;-)
     end select
end sub
Semplice no?
Una volta che hai stabilito questo protocollo, inizia la parte difficile....
allora....qui ti do' solo indizi perchè è molto lungo e complesso....
Apri il file che vuoi spedire (con open) in modalità byte col server......
Calcoli la lunghezza(LOF)
dividi la lunghezza per il tuo buffer prendendo solo l'intero della
divisione (es: filen \ 4096) nota \ anziche' / e lo chiami packetnumber
packetnumber sarà il numero delle volte che dovrai spedire 4096(+ il
comando) byte.
In base a questo invi 4096 byte al client, che li aggiunge ad un file aperto
in modalità byte in scrittura.Il client una volta ricevuto il pacchetto di
byte ricomunica al server che ne vuole ancora...e cosi' via tante volte
quanto vale packet number.
Poi devi prendere il resto dei pacchetti, dato dal resto della devisione di
cui sopra( restopacchetti=LOF(numfile) Mod 4096)) , ridimensioni il vettore
da spedire con questo numero e mandi via tcp.
Il client aggiunge al suo file e hai fatto.(+ o -....anzi forse - che +)
Lo so' è un casino, ma con un po' di testa e tanta pazienza ci si salta
fuori...a me funziona da dio e faccio fare al server quello che voglio...
;-)
A disposizione, tempo permettendo....
Umbe

 ha scritto nel messaggio
news:b1b07s$bdq$1...@grillo.cs.interbusiness.it...


 ha scritto nel messaggio
news:R4c_9.63574$YG2.1...@twister1.libero.it...
