2011-12-19 30 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