TreeMap Serialisation -> socket -> deserialisation

TreeMap Serialisation -> socket -> deserialisation - Java - Programmation

Marsh Posté le 13-04-2007 à 07:52:46    

J'ai fait un simple client/serveur pour expliquer mon probleme parceque là je seche.
Le serveur a une treeMap<Integer, Square> avec quelques valeurs dedans.
Le client interroge le serveur pour qu'il lui renvoit le contenu du TreeMap, tout ca en utilisant la serialisation d'objet.
 
Probleme : Bien que le serveur modifie le contenue de la treemap avant chaque reponse, le client recoit toujours la meme reponse  :cry:  
 
Quelqu'un a une idée de la raison ?
 
Merci
 
 
Code du client :

Code :
  1. import java.io.ObjectInputStream;
  2. import java.io.ObjectOutputStream;
  3. import java.net.Socket;
  4. import java.util.Iterator;
  5. import java.util.Timer;
  6. import java.util.TreeMap;
  7. public class TestClient {
  8. public TreeMap<Integer, Square> squares;
  9. ObjectOutputStream oos;
  10. ObjectInputStream ois;
  11. public void DoIt() throws Exception  {
  12.  Socket socket = new Socket("localhost", 4000);
  13.  oos = new ObjectOutputStream(socket.getOutputStream());
  14.  ois  = new ObjectInputStream(socket.getInputStream());
  15.  System.out.println("Connected" );
  16.  GetSquares();
  17.  GetSquares();
  18.  GetSquares();
  19. }
  20.     private void GetSquares() throws Exception {
  21.      RequestInfo ri = new RequestInfo();
  22.      ri.function = RequestInfoFunction.rifInit;
  23.      ri.posX = 3;
  24.        
  25.      oos.writeObject(ri);
  26.      squares = (TreeMap<Integer, Square> )ois.readObject();
  27.    
  28.      System.out.println("---" );
  29.  Iterator<Square> i = squares.values().iterator();
  30.         while(i.hasNext()){
  31.          Square aSquare = i.next();
  32.          System.out.println(String.format("%d %d %d", aSquare.id, aSquare.posX, aSquare.posY));
  33.         }
  34.     }
  35. /**
  36.  * @param args
  37.  */
  38. public static void main(String[] args) throws Exception {
  39.   TestClient testClient = new TestClient();
  40.   testClient.DoIt();
  41. }
  42. }


 
Code du serveur :

Code :
  1. import java.awt.Color;
  2. import java.io.*;
  3. import java.net.*;
  4. import java.util.Iterator;
  5. import java.util.TreeMap;
  6. public class TestServer extends Thread {
  7. private ServerSocket serverSocket;
  8. public TreeMap<Integer, Square> squares;
  9. public static void main(String argv[]) throws Exception {
  10.  new SquareServer();
  11. }
  12. public TestServer() throws Exception {
  13.  squares = new TreeMap<Integer, Square>();
  14.  int i = 0;
  15.  for (i = 0; i < 3; i++) {
  16.   Square curSquare = new Square();
  17.   curSquare.id = i;
  18.   curSquare.posX = i * 20;
  19.   curSquare.posY = i * 20;
  20.   curSquare.color = new Color(255, i * 20, 255);
  21.   squares.put(i, curSquare);
  22.  }
  23.  serverSocket = new ServerSocket(4000);
  24.  System.out.println("Server listening on port 4000." );
  25.  this.start();
  26. }
  27. public void run() {
  28.  while (true) {
  29.   try {
  30.    System.out.println("Waiting for connections." );
  31.    Socket client = serverSocket.accept();
  32.    System.out.println("Accepted a connection from: "
  33.      + client.getInetAddress());
  34.    ConnectTest c = new ConnectTest(client);
  35.    c.squares = squares;
  36.   } catch (Exception e) {
  37.    System.out.println(e.getMessage());
  38.   }
  39.  }
  40. }
  41. }
  42. class ConnectTest extends Thread {
  43. private Socket client = null;
  44. private ObjectInputStream ois = null;
  45. private ObjectOutputStream oos = null;
  46. public TreeMap<Integer, Square> squares = null;
  47. public ConnectTest(Socket clientSocket) throws Exception {
  48.  client = clientSocket;
  49.  ois = new ObjectInputStream(client.getInputStream());
  50.  oos = new ObjectOutputStream(client.getOutputStream());
  51.  this.start();
  52. }
  53. public void run() {
  54.  try {
  55.   while (client.isConnected()) {
  56.    RequestInfo ri = (RequestInfo) ois.readObject();
  57.    System.out.println("New request" );
  58.    squares.get(0).posX = squares.get(0).posX + 1;
  59.    oos.writeObject(squares);
  60.    oos.flush();
  61.    Iterator<Square> i = squares.values().iterator();
  62.    System.out.println("---" );
  63.    while (i.hasNext()) {
  64.     Square aSquare = i.next();
  65.     System.out.println(String.format("%d %d %d", aSquare.id,
  66.       aSquare.posX, aSquare.posY));
  67.    }
  68.   }
  69.   ois.close();
  70.   oos.close();
  71.  } catch (Exception e) {
  72.   System.out.println(e.getMessage());
  73.  }
  74. }
  75. }


 
Classe Square

Code :
  1. import java.awt.Color;
  2. import java.io.Serializable;
  3. public class Square implements Serializable, Comparable<Square> {
  4. static final long serialVersionUID = 0;
  5. public int id;
  6. public int posX, posY;
  7. public Color color;
  8. boolean locked = false;
  9. public int compareTo(Square square){
  10.  return square.id - this.id;
  11. }
  12. }


Reply

Marsh Posté le 13-04-2007 à 07:52:46   

Reply

Marsh Posté le 13-04-2007 à 16:49:46    

up :)

Reply

Marsh Posté le 16-04-2007 à 14:10:52    

un p'ti up

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed