Impossible d'envoyer objet 'image' sérialisé
Bonjour,
Mon but : créer un objet "image" a sérialiser pour ensuite l’envoyer depuis un client à un serveur qui a comme rôle de désérialiser l'objet "image" et d'y exploiter les infos qui se trouvent à l'intérieur.
Le client et le serveur possèdent tous les deux la même classe Photo implements serializable qui permet serialiser et désérialiser l'objet.
L'objet Photo est constitué : d'une String nom, d'une String annotation, d'un Boolean visible et d'un tableau de bytes qui doit contenir l'image à proprement parler
Première chose : ai je le droit de créer un objet contenant un tableau de bits qui servira à reconstituer l'image envoyée et à la copier sur le disque du serveur ?
Bref, donc apparemment le client envoie bien tout ce qu'il faut, mais le serveur me lance à chaque fois une exception que voici :
Code:
1 2 3 4 5 6 7 8 9
|
IO Exception
projet_server.Connexion run
java.io.EOFException
at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2281)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2750)
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:780)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:280)
at projeti4b_server.Connexion.run(Connexion.java:47) |
Voici le début de la classe Photo présente chez le serveur et le client (le package doit être le même chez les 2 sinon ça marche pas, est ce normal ??) :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| package projet_client;
import java.io.Serializable;
public class Photo implements Serializable{
private String nom="";
private String annotation="";
private Boolean visible=false;
private byte[] file;
public Photo(){
this.file=null;
this.nom="";
this.annotation="";
this.visible=null;
}
public Photo(byte[] b,String nm, String annot, Boolean ok){
this.file=b;
this.nom=nm;
this.annotation=annot;
this.visible=ok;
} |
Voici la classe Client qui est utilisée par une JFrame :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
package projet_client;
import java.io.*;
import java.net.*;
public class Client{
static final int port=8080;
static final String ip="localhost";
private String chemin_p;
private Photo Ph;
private PrintWriter out;
private BufferedReader in;
Socket socket;
public Client() throws Exception{
socket = new Socket(ip,port);
}
public void EnvoiPhoto(String path, String annot, Boolean visib) throws Exception{
chemin_p = path.substring(path.lastIndexOf("\\"));
chemin_p = chemin_p.substring(1,chemin_p.length());
out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
FileInputStream photo = new FileInputStream(path);
byte[] octets = new byte[photo.available()];
Ph=new Photo(chemin_p,annot,visib);
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
oos.writeObject(Ph);
oos.flush();
oos.close();
photo.close();
System.out.println("SOCKET "+socket);
System.out.println("Image envoyee");
//str=in.readLine();
}
public void Close() throws Exception{
socket.close();
out.close();
in.close();
} |
Voici ensuite le code Connexion du serveur :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
| package projet_server;
import java.io.*;
import java.net.*;
import java.util.logging.Level;
import java.util.logging.Logger;
public class Connexion extends Thread{
private GestionPhotos Gp;
private Socket socket;
private BufferedReader in;
private PrintWriter out;
private int nb=0;
public Connexion(Socket s) throws IOException {
socket=s;
Gp=new GestionPhotos();
in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
start();
}
public synchronized void run() {
try {
while (true) {
if(nb>=20)
out.println("trop d'images, veuillez en supprimer");
else{
ObjectInputStream flux=new ObjectInputStream(socket.getInputStream());//apparemment c'est là que ça cafouille
try {
projeti4b_client.Photo photoC = (projeti4b_client.Photo) flux.readObject();
} catch (ClassNotFoundException ex){
Logger.getLogger(Connexion.class.getName()).log(Level.SEVERE, null, ex);
}
//Je ne mets pas le reste de cette méthode puisque l'exception est lancée dès la première ligne
}
}
} catch(IOException e) {
System.err.println("IO Exception");
Logger.getLogger(Connexion.class.getName()).log(Level.SEVERE, null, e);
} finally {
try {
socket.close();
in.close();
out.close();
} catch(IOException e) {
System.err.println("Socket not closed");
}
}
}
} |
Quelqu'un saurait où sont mes erreurs ???
Merci !!