2011-12-19 2 views
0

Je tente d'envoyer un objet du client au serveur et l'un des états d'objet est un vecteur et l'autre est une chaîne. Je peux accéder à la chaîne sur le côté serveur, mais le contenu du vecteur est nul sur le serveur side..Can quelqu'un me aider .. s'il vous plaîtSérialisation d'objet réseau Java

// Server 
import java.net.*; 
import java.util.Vector; 
import java.io.*; 
public class SimpleServer { 

    public static void main(String args[]) { 
     int port = 2002; 
     try { 
      System.out.println("Hello"); 
      ServerSocket ss = new ServerSocket(port); 
      Socket s = ss.accept(); 
      System.out.println("Hello 2"); 
      InputStream is = s.getInputStream(); 
      ObjectInputStream ois = new ObjectInputStream(is); 
      testobject to = (testobject)ois.readObject(); 
      System.out.println("Vector size : " + to.vectorX.size() + " and object.id : " 
        + to.id); 
/*   if (to != null) { 
       for(int i = 0; i < to.vectorX.size(); ++i) 
       System.out.println("Output 1 : " + to.vectorX.elementAt(i)); 
      } */ 
      is.close(); 
      s.close(); 
      ss.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 


// Client 
import java.net.*; 
import java.io.* ; 
import java.util.Vector; 

public class SimpleClient { 

    protected static Vector<String> vectorX = new Vector<String>(); 

    public SimpleClient(){ 
     vectorX.addElement("hello"); 
     vectorX.add("goodbye"); 
     vectorX.add("finally"); 
    } 

    public static void main(String args[]) { 
     try { 
      new SimpleClient(); 
      Socket s = new Socket("localhost", 2002); 
      OutputStream os = s.getOutputStream(); 
      ObjectOutputStream oos = new ObjectOutputStream(os); 
      testobject to = new testobject(1, "theID", vectorX); 
      System.out.println(vectorX.size()); 
      oos.writeObject(to); 
//   oos.writeObject(new String("another object from the client")); 
      oos.close(); 
      os.close(); 
      s.close(); 
     } catch (Exception e) { 
      System.out.println(e); 
     } 
    } 
} 


//testobject 
import java.net.*; 
import java.io. * ; 
import java.util.Vector; 
class testobject implements Serializable { 
    int value; 
    String id; 
    Vector<String> vectorX; 

    public testobject(int v, String s, Vector<String> vector) { 
     this.value = v; 
     this.id = s; 
     this.vectorX = new Vector<String>(); 
    } 
} 

Répondre

2

Le constructeur de votre testobject n'utilise pas l'argument vector. Il est plutôt déléguant l'vectorX Ivar à une nouvelle instance, en ignorant le paramètre fourni par l'appelant:

public testobject(int v, String s, Vector<String> vector) { 
     this.value = v; 
     this.id = s; 
     this.vectorX = new Vector<String>(); // This is bad 
    } 

Vous devriez utiliser:

public testobject(int v, String s, Vector<String> vector) { 
     this.value = v; 
     this.id = s; 
     this.vectorX = vector; 
    } 

Note: Il est rare que les noms de classe Java doit être en minuscules ou commencer par une lettre minuscule. En aparté, je pense que vous devriez renommer votre classe à TestObject.

+0

Merci craig..Stupid erreur !! J'ai obtenu cette classe à l'origine d'un autre site ... Je me rends compte que la convention de nommage est fausse ici ... merci encore .. – oggiemc