2011-12-19 7 views
0

クライアントからサーバーにオブジェクトを送信しようとしていて、オブジェクト状態の1つがベクターで、もう1つが文字列です。あなたのtestobjectため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

コンストラクタはvector引数を使用していない...誰かが私を助けてくださいside..Can私は、サーバー側の文字列にアクセスすることができますが、ベクトルの内容は、サーバ上ゼロです。

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

があなたの代わりに使用する必要があります:それはむしろ、呼び出し側が提供するパラメータを無視して、新しいインスタンスにvectorX IVARを割り当てている

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

注:これは、クラス名に共通ではありません Javaをすべて小文字にするか、小文字で始めるかを指定します。さて、クラス名をTestObjectに変更してください。

+0

ありがとうcraig..Stupid mistake !!私はこのクラスをもともと別のサイトから持っていました。私は命名規則が間違っていることに気付きました。もう一度感謝します。 – oggiemc

関連する問題