Newsgroup: it.comp.java
Titolo: Invio file via socket utilizzando stream di oggetti

Ciao a tutti, vi vorrei sottoporre un quesito implementativo
Sono un laureando in ingengeria informatica e, io e una mia compagna di
corso, stiamo preparando una tesi scrivendo un sistema di messaging
distribuito (c'e' un server che fa solamente l'autenticazione ma la
comunicazione avviene direttamente fra client).
Utilizziamo degli objectInputStream e objectOutputStream per mandare
attraverso socket degli oggetti "Messaggio" contenenti cose come testo del
messaggio, stili, nickname ecc.. 
Il problema che stiamo affrontando ora, e su cui non siamo riusciti a
trovare informazioni e':dobbiamo permettere ai client di scambiarsi file
(ed eventualmente fare upload/download su server)
- Possiamo aggiungere un oggetto File (che e' serializzabile) alla classe
Messaggio ? Non abbiamo ben capito se facendo cio' trasferiamo solamente un
riferimento al file aperto oppure tutto il file.
Avevamo pensato di acquisire il contenuto del file in un BufferedReader o
qualcosa di simile e poi unviarlo, pero' leggendo la documentazione ci
siamo accorti che non implementa serializabke... :-(
- Avete qualche idea a proposito ? 
Grazie.
Damiano

 ha scritto nel messaggio
news:d372c6mxkaah.pex6yeyztmjs$.dlg@40tude.net...

La classe File, come giustamente pensavi, serve solo per la gestione del
file e non ne memorizza il contenuto. Per fare quello che vuoi tu
probabilmente la soluzione migliore è usare un FileInputStream e leggere
l'intero contenuto del file mettendolo in un array di byte. A questo punto
puoi spedire il tutto all'interno di un messaggio. Ovviamente questo ha
senso se i file non sono troppo grossi, altrimenti credo che convenga fare
il trasferimento del file su una socket distinta rispetto a quella usata per
i messaggi (in pratica come fa il protocollo FTP).
--
Marco

 i messaggi (in pratica come fa il protocollo FTP).
Grazie, non mi era proprio venuto in mente l'array di byte.. 
Mi e' venuto in mente ora che cosi' possiamo spezzettare il file e inviarlo
in piu' messaggi e magari gestire una barra di avanzamento se inviamo il
numero di frammenti in cui il file e' stato diviso.
Grazie ancora
-- 
Ciao.
Damiano

 comunicazione avviene direttamente fra client).
Ciao,
non rispondo direttamente al tuo problema ma...avete dato un'occhiata
a JXTA ?
Credo faccia al caso vostro...magari, come consiglio, potreste usare XML
ed HTTP come protocolli: risulterebbe meno problematico dal punto di vista
del networking e...alla fine potreste usare SOAP come protocollo (gia'
bello e definito).
Il tutto, grazie ad XML, risulterebbe anche espandibile (invece di
un'applicazione
cliente, un giorno, potreste adattare un applet o un'applicazione
server-side...)
la fantasia non ha limiti.
Spero di esserti stato utile.
Igor.
P.S.: per l'invio di file in XML, potresti usare il Base64 Encoding...

 bello e definito).
ehm... a saperlo prima magari l'avremmo usato... :)
Il problema e' che a lezione ci hanno spiegato solo le basi di Java
(niente thread, networking ecc), quindi ci siamo dovuti arrangiare con
quello che abbiamo trovato su alcuni libri (in cui non si parlava proprio
di JXTA)
Purtroppo abbiamo quasi finito tutto il programma e adattarlo adesso
sarebbe quasi un suicidio... oggi iniziamo a codificare la parte di
trasferimento dei file e poi il progetto e' finito, magari avrete
occasione di vederlo, vorremmo pubblicarlo sotto licenza GPL.
Grazie per il consiglio, cominciero' a informarmi un po' su JXTA, magari
prima o poi ci tornera' utile...
Damiano