0

サーバーまたはクライアントが PrintStream を使用して文字列を送信し、BufferedReader/InputStreamReader を使用して文字列を読み取るクライアント サーバー アプリケーションを作成しています。最終的には、ObjectInputStream/ObjectOutputStream を使用して、サーバーからクライアントに、またはその逆にオブジェクトを送信する必要があります。

文字列の送受信からオブジェクトの送受信に切り替えるにはどうすればよいですか? 「無効なストリーム ヘッダー: 7372000E」が表示されます。

クライアントのストリーム部分は次のとおりです (簡潔にするためにすべての例外を省略しています)。

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
BufferedReader fromServer;
PrintStream clientToServer;
try {
    fromServer = new BufferedReader(new InputStreamReader(sock.getInputStream()));
    clientToServer = new PrintStream(sock.getOutputStream());
} catch (IOException e) {
    System.out.println(e.getMessage());
    e.printStackTrace();
    return;
}

String username;
String opcode;
System.out.print(fromServer.readLine()); // MESSAGE 1
username = in.readLine();
clientToServer.println(username); // MESSAGE 2
System.out.println(fromServer.readLine()); // MESSAGE 3
if (!username.matches("[a-zA-Z]\\w+")) {
    return;
}
opcode = fromServer.readLine(); // MESSAGE 4

opcode1 の if ステートメントとファイルの場合:

ObjectInputStream ois;
ObjectOutputStream oos;
UUID u = null;
ois = new ObjectInputStream(new FileInputStream(f));
u = (UUID) ois.readObject();
oos = new ObjectOutputStream(sock.getOutputStream());
oos.writeObject(u); // MESSAGE 5

Else ステートメントと、opcode2 のその他のファイルを次に示します。

ObjectOutputStream oos;
ObjectInputStream ois;
UUID u;
ois = new ObjectInputStream(sock.getInputStream());
u = (UUID) ois.readObject(); // MESSAGE 5
System.out.println("UUID " + u.toString() + " received.");
oos = new ObjectOutputStream(new FileOutputStream(f));
oos.writeObject(u);
System.out.println("UUID " + u.toString() + " written to file.");

サーバーは次のことを行います。

PrintStream output = new PrintStream(sock.getOutputStream()); 
BufferedReader input = new BufferedReader(new InputStreamReader(sock.getInputStream()));
output.println("Please enter your username: "); // MESSAGE 1
username = input.readLine(); // MESSAGE 2
output.println("Welcome back!"); // MESSAGE 3
output.println("opcode1") OR output.println("opcode2") // MESSAGE 4

opcode1 セクション:

ObjectInputStream ois = new ObjectInputStream(sock.getInputStream());
UUID local = (UUID) ois.readObject(); // MESSAGE 5
if (user.getUUID().equals(local))
output.println("Your UUID is valid."); // MESSAGE 6

opcode2 セクション:

ObjectOutputStream oos = new ObjectOutputStream(sock.getOutputStream());
oos.writeObject(u.getUUID()); // MESSAGE 5
output.println("You now have a UUID."); // MESSAGE 6
4

1 に答える 1