因此,我一直在使用套接字来处理java中的2人井字游戏。所有的套接字工作正常,并且我在2个客户端和服务器之间成功地发送数据。通过java套接字发送对象的问题
我有以下类:Requester,Provider和TBoard(它扩展了Serializable)。
在请求者(客户端)类中,我实例化了TBoard的一个对象(TBoard board = new TBoard()
)。
然后,我通过套接字将该对象通过输出流发送给我的两个客户端。
我得到的错误是在客户端,它是:
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");
}
我print_board()在TBoard类方法是为了返回:Exception in thread "main" java.lang.ClassCastException: java.lang.String
这与发生二维数组,但现在(简化目的),我有方法返回字符串“你好”...
有没有人知道为什么会发生这种情况?我不想用代码轰炸你们,但请让我知道如果发布任何更多可能会有所帮助...
谢谢!
UPDATE:
以下是我与我的供应商回事(详细)(服务器)类:
// 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);
所以我确实是在流发送字符串在发送最后一个对象(板)之前。但是,我预先冲出了溪流。我也试过在刷新后重置(),它仍然给我IllegalCastException ...
为ClassCastException添加一个catch。像catch(ClassCastException CCE){CCE.printStackTrace(); }并向我们展示前几行的结果。我想确切地知道什么线路导致问题 – NawaMan 2009-09-23 07:15:53
他在问题中这么说 - 我首先忽略了这一点 – 2009-09-23 07:17:40