Client - Serveur - Sérializable
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:
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:
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:
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.