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

 Смежные вопросы

  • Нет связанных вопросов^_^