Bonjour,
Je cherche à envoyer une donnée structurée à travers un socket. Cette donnée est en fait un objet qui contient deux long :
[XMLInit lit dans un .xml et renvoie les données voulues avec l'aide d'une autre classe XMLManager qui lit une donnée dans n'importe quel .xml]
Mon serveur ne va faire qu'envoyer l'objet et le client va le lire et l'afficher.
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 public class DataScheduler implements java.io.Serializable { private long top; private long delta; public long getXMLTop(){ XMLManager xml = new XMLManager("Scheduler.xml"); long top = Long.parseLong(xml.getXMLValue("Top;Valeur", "", "")); return top; } public long getXMLDelta(){ XMLManager xml = new XMLManager("Scheduler.xml"); long delta = Long.parseLong(xml.getXMLValue("Delta;Valeur", "", "")); return delta; } public long getTop(){ return this.top; } public long getDelta(){ return this.delta; } public DataScheduler(){ this.top = this.getXMLTop(); this.delta = this.getXMLDelta(); } }
Classe qui sert de serveur :
J'utilise ainsi ObjectOutput comme j'ai cru comprendre que cela pouvait m'aider à serializer mon objet.
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 public class C_Scheduler { public void timer (long numberOfSeconds){ try { Thread.sleep(numberOfSeconds*1000); } catch(InterruptedException ex) { Thread.currentThread().interrupt(); } } public static void main(String[] args) throws IOException{ C_Scheduler s = new C_Scheduler(); System.out.println("Scheduler's window \n"); // Lecture des données pour le scheduler (XML) DataScheduler ds = new DataScheduler(); // Initialisation pour le port XMLInit xml = new XMLInit(); int portOfScheduler = xml.getNumberOfSchedulerPort(); // Ouverture du port ServerSocket serverSocket = new ServerSocket(portOfScheduler); serverSocket.setSoTimeout(0); Socket schedulerServer = serverSocket.accept(); ObjectOutputStream out = new ObjectOutputStream(schedulerServer.getOutputStream()); while (true) { s.timer(ds.getTop()); // Ecriture des données sur le port (Object) out.writeObject(ds); out.flush(); } } }
Code Client :
Le soucis est que cela ne fonctionne pas du tout et je n'arrive pas à trouver où est la faute. Le problème serait une erreur dans l'écriture dans a socket mais je ne vois pas pourquoi cela ne marche pas.
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 import java.io.IOException; import java.io.ObjectInputStream; import java.net.Socket; public class C_Client { public static void main(String[] args) throws IOException, ClassNotFoundException{ String serverName = "localHost"; // Récupération du port XMLInit xml = new XMLInit(); int port = xml.getNumberOfClientPort("Client1"); // Ouverture du port Socket client = new Socket(serverName, port); ObjectInputStream in = new ObjectInputStream(client.getInputStream()); // Lecture des données while (true){ DataScheduler ds = (DataScheduler)in.readObject(); System.out.println ("Delta : " + ds.getDelta() + " et top : " + ds.getTop()); } } }
Si vous pouvez m'aider, je vous serais reconnaissante, j'ai tout essayé mais désespère à faire marcher cette petite application.
Merci par avance.
Partager