Сериализация сетевых объектов Java - PullRequest
0 голосов
/ 20 декабря 2011

Я пытаюсь отправить объект с клиента на сервер, и одно из состояний объекта является вектором, а другое - строкой.Я могу получить доступ к строке на стороне сервера, но векторное содержимое равно нулю на стороне сервера .. Может кто-нибудь помочь мне, пожалуйста ..

    // 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>();
    }
}

1 Ответ

2 голосов
/ 20 декабря 2011

Конструктор для вашего testobject не использует аргумент vector. Это скорее назначение vectorX ivar новому экземпляру, игнорируя параметр, предоставленный вызывающей стороной:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...