Newsgroup: it.comp.programmare.win32
Titolo: Invio file con winsock

Ciao a tutti, anticipo che non sono esperto di sdk ma mi serve un aiuto
per la tesina....
Come faccio ad inviare file da un server in sdk??

Intendo tramite un socket ovviamente.. e preciso che posso anche
sbagliarmi con i termini utilizzati...

 
Qualcosa come questo?
1) apri la connessione di rete
2) apri il file in lettura
3) mandi le informazioni del file (se richiesto) come dimensione, nome, 
permessi, date, ecc.
4) leggi il file a blocchi prefissati (diciamo 200kB alla volta) e lo 
spari via rete
5) chiudi file e socket
LP

devo inviare un file da un server in sdk ad un client....
Il client chiede un certo file e il server lo deve mandare... Non so
come scomporlo e spedirlo.... cmq come hai detto tu....


Ti ho già dato la traccia per la soluzione. Il resto è mera 
implementazione del codice.
La lettura di un file non è una cosa difficile (è la terza cosa che 
insegnano ad un corso di info1 ad Ingegneria informatica, dopo "che cosa 
è il C" e "quali e come si usano le variabili").
La comunicazione via socket (in ambiente POSIX compatibile) è argomento 
di Info2.
Si tratta di leggere il file a blocchi con una banalissima fread() o una 
ReadFile, volendo usare le API di Win, e spedire i buffer letti con la 
funzione send.
Apertura e chiusura socket sono argomenti da howto di migliaia di guide 
alla programmazione, ...
La cosa più problematica potrebbe essere la definizione di un protocollo 
di comunicazione per gestire, oltre alla trasmissione, la richiesta, la 
risposta, ed il controllo di eventuali errori.
LP

 
[...]
Scusa, tesina di diploma, intendevi dire?
(ho visto adesso il dominio dell'ITIS di Parma nella tua mail)
Frequenti informatica, vero?
LP

Grazie mille, adesso provo con fRead e la send..Ma la send non invia
solo delle stringhe?? Cmq io sono ancora in quinta superiore..

 
Sì, scusami. Avevo inteso "testina" legata alla laurea, invece che alla 
maturità.
Comunque la send invia "stringhe" nel senso di array di byte, tant'è che 
ha come parametri il puntatore all'area da inviare e la quantità di byte 
che devono essere inviati. Quindi se la stringa contiene il carattere 
\0, questo viene inviato senza nessun problema.
Stesso discorso vale per la fread e la fwrite.
LP

Luca Pascali ha scritto:

Ah grazie... cmq lo apro con la "createfile" e poi lo leggo con la
"fread" e lo spedisco con la "send"??

 
Piů o meno. Se apri con CreateFile, devi utilizzare ReadFile, se apri 
con fopen, devi utilizzare fread (questione di parametri, la CreateFile 
torna un HANDLE, la fopen torna un FILE*)
e poi sě, utilizzi la send per spedire.
LP

[...]Ma la send non invia solo delle stringhe??
No.  La send()/recv() invia/riceve buffer di dati qualsiasi.  La
comunicazione tra client e server deve seguire un protocollo
specifico.  Un protocollo che definisci tu.  Fai sempre in modo che
client e server conoscano con esattezza il numero di byte spediti
dall'uno verso l'altro e che compiano delle letture esatte per il
numero di byte inviati.  

Scusate il ritardo cmq facendo delle prove e ho capito, infatti stiamo
cercando di far comunicare un server sdk con un client visual basic e
per l'invio di files ho notato appunto le cose che mi hai detto tu....
Cmq penso che li invierò come pacchetti... grazie di tutto.