通过套接字发送自定义对象,在服务器上始终为null

时间:2014-05-22 09:38:12

标签: java android sockets

我有一个客户端(Android应用程序)和一个服务器。我想从客户端向服务器发送一个对象。我从Netbeans运行服务器,从Eclipse运行客户端。问题是服务器端的对象为null。我已经在类中添加了包,因此它存在于服务器项目和客户端项目中。

客户:

out = new ObjectOutputStream(socket.getOutputStream());
                out.flush();
                in = new ObjectInputStream(socket.getInputStream());

                if(quiz != null) {
                    Log.e("Name", quiz.getName()); // 
                }

                out.writeObject(quiz);
                out.flush();

                socket.close();
                out.close();
                in.close();

日志正在写测验的名称,所以它不是null。服务器是多线程的,客户端通信器的关键部分如下所示:

Quiz quiz = null;
        try {
            in = null;
            ut = null;
            try {

                in = new ObjectInputStream(socket.getInputStream());
                ut = new ObjectOutputStream(socket.getOutputStream());

                quiz = (Quiz)in.readObject();


            } catch (IOException ex) {
                    server.disconnected(socket.getInetAddress().getHostAddress());

            } catch (ClassNotFoundException e) {
                            e.printStackTrace();
                    }

             if(quiz == null) {
                    System.out.println("Something is wrong");
                }
                socket.close();
                in.close();
                ut.close();

服务器正在打印“Something is wrong”,因此该对象为null。我将thep包com.example.quiz移动到了server-project中的Source包 - 文件夹,因此它应该是两端的同一个对象。该对象的类也在实现Serializable。

有什么不对?

1 个答案:

答案 0 :(得分:0)

  

服务器正在打印"出现问题",因此对象为空。

没有。服务器正在打印"出了问题"所以要么对象是空你抓住了一个可能的例外。使用quiz的代码应位于try块内,而不是在所有catch块之后。如果您真的从null收到ObjectInputStream.readObject(),那只能是因为您使用null

写了ObjectOutputStream.writeObject().