gpt4 book ai didi

java - 通过 Java 套接字发送对象的问题

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:58:39 26 4
gpt4 key购买 nike

所以我一直在使用 java 开发一个使用套接字的 2 人井字游戏。所有套接字都在工作,我在 2 个客户端和服务器之间成功地来回发送数据。

我有以下类:Requester、Provider 和 TBoard(扩展了 Serializable)。

在 Requester(客户端)类中,我实例化了一个 TBoard 对象(TBoard board = new TBoard())。

然后我通过套接字将该对象通过输出流发送到我的两个客户端。

我得到的错误是在客户端,它是:Exception in thread "main"java.lang.ClassCastException: java.lang.String

这是发生在:

 board = (TBoard) in.readObject(); in:

do {
try {
board = (TBoard) in.readObject();
System.out.println(board.print_board());
} catch (ClassNotFoundException classNot) {
System.err.println("data received in unknown format");
}

我在 TBoard 类中的 print_board() 方法旨在返回一个二维数组,但现在(为了简化目的),我有返回字符串“Hello”的方法...

有谁知道为什么会这样?我不想用代码轰炸你们所有人,但如果再发帖可能会有帮助,请告诉我...

谢谢!


更新:

这是我(更详细地)使用我的提供者(服务器)类进行的操作:

 // 1. creating a server socket
providerSocket = new ServerSocket(20092);

// 2. Wait for connection
System.out.println("Waiting for connection...");

connection1 = providerSocket.accept();
System.out.println("Connection received from Player 1 " +

connection1.getInetAddress().getHostName());
connection2 = providerSocket.accept();
System.out.println("Connection received from Player 2 " + connection2.getInetAddress().getHostName());

// 3. get Input and Output streams
out = new ObjectOutputStream(connection1.getOutputStream());

out2 = new ObjectOutputStream(connection2.getOutputStream());

in = new ObjectInputStream(connection1.getInputStream());
out.writeObject("Player 1 has been connected successfully.");
in2 = new ObjectInputStream(connection2.getInputStream());
out2.writeObject("Player 2 has been connected successfully.");

out.flush();
out2.flush();

out.writeObject(board);
out2.writeObject(board);

所以我确实在发送最后一个对象(板)之前在流中发送了一个字符串。但是,我事先冲洗掉了溪流。我也在刷新后尝试了 reset(),它仍然给了我 IllegalCastException...

最佳答案

IIRC,Exception 中提到的类是实际找到的类,因此在您显示的代码中,错误必须在此处:

board = (TBoard) in.readObject();

还有一个 String 对象而不是从流中读取的 TBoard。

编辑:因此,除了数据之外,您发送字符串。这是你的问题。您要么必须停止发送这些字符串,要么在读取数据之前在接收方读取它们。调用 flush() 与此无关 - 它只是确保您已经写入流的字符串实际上是通过连接发送的,而不是保留在缓冲区中。

关于java - 通过 Java 套接字发送对象的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1464378/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com