Fayzaj
Messages postés7Date d'inscriptionlundi 8 octobre 2007StatutMembreDernière intervention20 juillet 2010
-
21 sept. 2008 à 14:41
Fayzaj
Messages postés7Date d'inscriptionlundi 8 octobre 2007StatutMembreDernière intervention20 juillet 2010
-
27 sept. 2008 à 15:00
salut,
J'ai deux applications une serveur et l'autre client et j'envoi des
objets grâce à ObjectOutputStream et les reçoit grâce à
ObjectInputStream.
Mais quand le client envoie un objet de type file vers mon serveur en utilisant :
File ftosend=new File(chemin);
out = new ObjectOutputStream(socket.getOutputStream());
out.writeObject(ftosend);
et en le receptionant sur le serveur en utilisant:
SsAccept_in = new ObjectInputStream(SSAccept.getInputStream());
File resultat=(File)SsAccept_in.readObject();
objectIn.readObject();
mais au niveau de serveur il m'affiche l'erreuur suivant:
Connexion:java.io.FileNotFoundException: " /usr/test/monfichier" (No such file or directory)Connexion: connexion terminée
meme quand j'essaie de lire ce fichier avant de l'envoyer et mis tout ces lignes dans un ArrayList puis j'envoie comme objet ce ArrayList mais quand j'essaie de lire au niveau serveur il boucle à l'infini
quelqu'un aurait'il une explication sur ces deux methodes ?
Merci
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 22 sept. 2008 à 08:25
Salut:
Pourquoi utilises tu un objet File? Tu peux sérialiser un objet directement.
public class Bean implements Serializable {
// ...
}
// Côté client
Bean bean = new Bean();
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
oos.writeObject(bean);
// Côté serveur
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
Bean bean = (Bean)ois.readObject();
Fayzaj
Messages postés7Date d'inscriptionlundi 8 octobre 2007StatutMembreDernière intervention20 juillet 2010 22 sept. 2008 à 13:31
Salut,
merci pour votre réponse mais avant testé cette solution j'ai un probleme avec la serialisation donc est ce que ce code est juste??
import java.io.*;
import java.net.*;
public class Bean implements Serializable{
private static final long serialVersionUID = 1L;
private File[] file;
private int lenght;
public Bean(File[] file) {
super();
this.file = file;
this.lenght=file.length;
}
public int lenght() {
return lenght;
}
public File getFile(int i) {
return file[i];
}
}
Merci
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 22 sept. 2008 à 13:52
Salut:
Tout semble être bien fait. Cependant, je te conseille de:
1. Ajouter un constructeur par défaut.
2. Générer automatiquement le variable serialVersionUID à l'aide d'un IDE (Eclipse, ...), en effet cet identifiant est calculé à l'aide d'une procédure un peu complexe en fonction de tous les membres publiques et protégés de la classe (Il permet d'identifier d'une façon unique une classe donnée). Ou bien ne pas le déclarer, la JVM va se débrouiller pour le faire.
Fayzaj
Messages postés7Date d'inscriptionlundi 8 octobre 2007StatutMembreDernière intervention20 juillet 2010 23 sept. 2008 à 12:40
salut,
j'ai testé cette solution entre deux machines l'une comme client et l'autre serveur qui envoie des fichiers aux client ,mais au niveux client quand je recois l'objet et essayé de déserialisé avec la classe Bean qui j'ai deja envoyé précedament qui situé au machine serveur pour sérialisé et au niveaux machine client pour déserialisé elle m'affiche le problème suivant au niveau client:
java.lang.ClassNotFoundException:packageMachineServer.Bean
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at java.io.ObjectInputStream.resolveClass(Unknown Source)
at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
at java.io.ObjectInputStream.readClassDesc(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at packageMachineclient.Client.(Clientstream.java:16)
at packageMachineclient.Client.main(Clientstream.java:37)
la ligne 16 est:
Bean fileIO=(Bean)ois.readobject();
et voila mon code de seveur:
package packageMachineServer;
import java.io.*;
import java.net.*;
public class Server{
public Server() {
File[] filenvoye = new File[1];
filenvoye[0] = new File("/home/workspace/testEfile");
//sérialiser
Bean files = new Bean(filenvoye);
OutputStream os;
ServerSocket socket;
try {
ObjectOutputStream oos;
System.out.println("En ecoute .......");
socket = new ServerSocket(1024);
Socket SsAccept;
while(true){
SsAccept = socket.accept();
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
os = SsAccept.getOutputStream();
oos = new ObjectOutputStream(os);
//envoyer les donne
oos.writeObject(files);
System.out.println("les donne sont envoyer;;;;;;;;");
}
//os.close();
//oos.close();
//SsAccept.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch(IOException exp){
exp.printStackTrace();
}
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
}
public static void main(String[] args) {
new Server();
}
}
et ma classe au niveux client est:
package packageMachineclient;
import java.io.*;
import java.net.*;
public class Client {
public Client() {
Socket socket;
try {
socket = new Socket("192.186.0.133",1024);
//On ouvre notre flux d'entrée
InputStream is = socket.getInputStream();
ObjectInputStream ois = new ObjectInputStream(is);
//On cast l'objet pour en retirer les informations
Bean fileIO = (Bean)ois.readObject();
String texte = new String(" ");
for (int i=0;i<fileIO.lenght();i++){
fileIO.redfile(i);
//Affiche la liste des fichiers qui ont été envoyés
System.out.println("Le fichier est :"+fileIO.getFile(i).getPath());
texte+=fileIO.getFile(i).getPath();
texte+='\n';
}
ois.close();
is.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
catch (ClassNotFoundException e) {
System.out.println("voila mon problem"+e.getCause());
e.printStackTrace();
}
}
public static void main (String []arg){
new Client();
}
}
Merci
Vous n’avez pas trouvé la réponse que vous recherchez ?
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 24 sept. 2008 à 08:13
Salut:
Tu dois inclure la classe Bean dans la partie client et la partie serveur. Pour cela, il vaut mieux, l'exporter en tantque fichier JAR.
Il faut que la classe Bean soit accessible aux deux modules: module client & module serveur.
Note: Ce genre de problème est dû et couplage fort entre les modules distribués de l'application.
Fayzaj
Messages postés7Date d'inscriptionlundi 8 octobre 2007StatutMembreDernière intervention20 juillet 2010 24 sept. 2008 à 15:05
salut,
la classe Bean.class a situé au packageMachineServer avec la classe Serveur dans la machine de serveur et danse le package package Machineclient avec la classe Client au machine client
Merci
Fayzaj
Messages postés7Date d'inscriptionlundi 8 octobre 2007StatutMembreDernière intervention20 juillet 2010 27 sept. 2008 à 13:56
salut,
ce problème a réglé avec le 3 jar qui contient Bean.class mais le problème comment je peut recuperer les donnes de ce fichier????est ce que il faut d'ajouter une autre méthode au ma classe Bean qu'a lu les donné de ce fichier??????????????
Merci
Fayzaj
Messages postés7Date d'inscriptionlundi 8 octobre 2007StatutMembreDernière intervention20 juillet 2010 27 sept. 2008 à 15:00
Salut,
pske ma classe Bean.class peut recupérer juste le chemin de fichier donc j'ai ajouter une méthode qu'a lu le contenu de ce fichier et mis dans ArrayList mais quand je déserialise il affiche des erreur au niveu client
merci