1

我正在开发一个简单的客户端/服务器程序,现在它应该做的就是在连接时从客户端向服务器发送一个对象,然后从服务器发送一个包含响应的对象。

我的对象应该发送用户名和密码。是的,我知道还有其他方法可以验证 TCP 连接,但这是一个测试,可以帮助我在使用 java 联网时涉足。

我的对象是这样写的:

   import java.io.Serializable;

public class AuthAccount implements Serializable{
    private static final long serialVersionUID = -8918729105550799244L;
    private String username;
    private String password;

    AuthAccount(String user, String pass){
        username = user;
        password = pass;
    }
    String username(){
        return username;
    }
    String password(){
        return password;
    }
}

套接字连接成功,但在这一行(oosis ObjectOutputStream)失败:

System.out.print("Sending login object to server...");
oos.writeObject(new AuthAccount("user", "password"));
System.out.println("Done!");

我不断收到错误:

java.io.NotSerializableException: AuthAccount

我已经尝试使用 AuthAccount 测试类char[] username = new char[30];,以便拥有一个固定大小的对象。我更像是一个 C++ 人,但对于这个项目,java 对我来说很有意义。

4

1 回答 1

3

您必须使用旧版本的构建,因为

public class Main {
    public static void main(String... args) throws IOException, ClassNotFoundException {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(baos);
        oos.writeObject(new AuthAccount("u", "p"));
        oos.close();

        ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(baos.toByteArray()));
        Object aa = ois.readObject();
    }
}
 class AuthAccount implements Serializable{
    private static final long serialVersionUID = 1;
    private final String username;
    private final String password;

    AuthAccount(String user, String pass){
        username = user;
        password = pass;
    }
    String username(){
        return username;
    }
    String password(){
        return password;
    }
}

运行没有错误。

于 2012-08-09T18:01:21.390 回答