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

char[] username = new char[30];固定サイズのオブジェクトを使用するために、AuthAccount テスト クラスを使用してみました。私はどちらかというと 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 に答える