2011-12-19 70 views
0

我试图发送一个客户端到服务器的对象,其中一个对象状态是一个向量,另一个是字符串。我能访问字符串在服务器端,但向量内容是在服务器上零side..Can有人帮我请..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>(); 
    } 
} 

回答

2

的构造为您testobject没有使用vector说法。这是相当分配vectorX伊娃到一个新的实例,忽略由调用者提供的参数:

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

您应该改用:

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

注:这不是常见的类名中Java全部小写,或者以小写字母开头。另外,我想你应该把你的班级重命名为TestObject

+0

谢谢craig..Stupid错误!我最初从另一个网站上得到这个课程..我意识到命名约定在这里是错误的..再次感谢.. – oggiemc 2011-12-19 23:51:18