nico168 | 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 Quelqu'un a une idée de la raison ?
Merci
Code du client :
Code :
- import java.io.ObjectInputStream;
- import java.io.ObjectOutputStream;
- import java.net.Socket;
- import java.util.Iterator;
- import java.util.Timer;
- import java.util.TreeMap;
- public class TestClient {
- public TreeMap<Integer, Square> squares;
- ObjectOutputStream oos;
- ObjectInputStream ois;
- public void DoIt() throws Exception {
- Socket socket = new Socket("localhost", 4000);
- oos = new ObjectOutputStream(socket.getOutputStream());
- ois = new ObjectInputStream(socket.getInputStream());
- System.out.println("Connected" );
- GetSquares();
- GetSquares();
- GetSquares();
- }
- private void GetSquares() throws Exception {
- RequestInfo ri = new RequestInfo();
- ri.function = RequestInfoFunction.rifInit;
- ri.posX = 3;
-
- oos.writeObject(ri);
- squares = (TreeMap<Integer, Square> )ois.readObject();
-
- System.out.println("---" );
- Iterator<Square> i = squares.values().iterator();
- while(i.hasNext()){
- Square aSquare = i.next();
- System.out.println(String.format("%d %d %d", aSquare.id, aSquare.posX, aSquare.posY));
- }
- }
- /**
- * @param args
- */
- public static void main(String[] args) throws Exception {
- TestClient testClient = new TestClient();
- testClient.DoIt();
- }
- }
|
Code du serveur :
Code :
- import java.awt.Color;
- import java.io.*;
- import java.net.*;
- import java.util.Iterator;
- import java.util.TreeMap;
- public class TestServer extends Thread {
- private ServerSocket serverSocket;
- public TreeMap<Integer, Square> squares;
- public static void main(String argv[]) throws Exception {
- new SquareServer();
- }
- public TestServer() throws Exception {
- squares = new TreeMap<Integer, Square>();
- int i = 0;
- for (i = 0; i < 3; i++) {
- Square curSquare = new Square();
- curSquare.id = i;
- curSquare.posX = i * 20;
- curSquare.posY = i * 20;
- curSquare.color = new Color(255, i * 20, 255);
- squares.put(i, curSquare);
- }
- serverSocket = new ServerSocket(4000);
- System.out.println("Server listening on port 4000." );
- this.start();
- }
- public void run() {
- while (true) {
- try {
- System.out.println("Waiting for connections." );
- Socket client = serverSocket.accept();
- System.out.println("Accepted a connection from: "
- + client.getInetAddress());
- ConnectTest c = new ConnectTest(client);
- c.squares = squares;
- } catch (Exception e) {
- System.out.println(e.getMessage());
- }
- }
- }
- }
- class ConnectTest extends Thread {
- private Socket client = null;
- private ObjectInputStream ois = null;
- private ObjectOutputStream oos = null;
- public TreeMap<Integer, Square> squares = null;
- public ConnectTest(Socket clientSocket) throws Exception {
- client = clientSocket;
- ois = new ObjectInputStream(client.getInputStream());
- oos = new ObjectOutputStream(client.getOutputStream());
- this.start();
- }
- public void run() {
- try {
- while (client.isConnected()) {
- RequestInfo ri = (RequestInfo) ois.readObject();
- System.out.println("New request" );
- squares.get(0).posX = squares.get(0).posX + 1;
- oos.writeObject(squares);
- oos.flush();
- Iterator<Square> i = squares.values().iterator();
- System.out.println("---" );
- while (i.hasNext()) {
- Square aSquare = i.next();
- System.out.println(String.format("%d %d %d", aSquare.id,
- aSquare.posX, aSquare.posY));
- }
- }
- ois.close();
- oos.close();
- } catch (Exception e) {
- System.out.println(e.getMessage());
- }
- }
- }
|
Classe Square
Code :
- import java.awt.Color;
- import java.io.Serializable;
- public class Square implements Serializable, Comparable<Square> {
- static final long serialVersionUID = 0;
- public int id;
- public int posX, posY;
- public Color color;
- boolean locked = false;
- public int compareTo(Square square){
- return square.id - this.id;
- }
- }
|
|