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]

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();
 
	}
}
Mon serveur ne va faire qu'envoyer l'objet et le client va le lire et l'afficher.

Classe qui sert de 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
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();
		}
	}
}
J'utilise ainsi ObjectOutput comme j'ai cru comprendre que cela pouvait m'aider à serializer mon objet.

Code Client :

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());
		}
	}
}
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.

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.