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 :
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 !!
Partager