【发布时间】:2009-09-23 07:06:46
【问题描述】:
所以我一直在用 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”的方法...
有谁知道为什么会发生这种情况?我不想用代码轰炸你们所有人,但如果发布更多内容可能会有所帮助,请告诉我......
谢谢!
更新:
这是我对 Provider(服务器)类所做的(更详细的):
// 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...
【问题讨论】:
-
为 ClassCastException 添加更多捕获。像 catch(ClassCastException CCE) { CCE.printStackTrace();并向我们展示前几行结果。我想确定是哪条线路导致问题
-
他在问题中这么说 - 我一开始也忽略了这一点