(我知道这可以在RMI中完成,但我需要使用套接字来完成,因为我发现如果使用RMI方法可能会有一些设置过程)
请查看http://www.coderanch.com/t/205325/sockets/java/send-any-java-Object-through
上的简单客户端 - 服务器代码在此程序中,SimpleServer发送SimpleServer发送的两个对象的订单。
即:服务器
oos.writeObject(new testobject(1,"object from client"));
oos.writeObject(new String("another object from the client"));
客户端根据接收对象的顺序进行转换。但是我想避免这种性质并让客户端随时发送任何对象,这样服务器也应该能够处理相应发送的每个对象并返回结果。
testobject to = (testobject)ois.readObject();
System.out.println(to.id);}
System.out.println((String)ois.readObject());
有没有办法“标记”正在发送的对象,以便可以通过服务器中的简单“if”语句来确定操作?
或
有没有更好的方法来使用服务器返回的ResultSet 而不是我的对象序列化方法?
提前感谢。
由于
答案 0 :(得分:2)
readObject
将在其正确的类中返回一个对象。如果你需要一些基于你的分支逻辑,你可以使用instanceof
:
Object newObj = stream.readObject();
if (newObj instanceof testobject) {
doSomething((testobject) newObj);
} else if (newObj instanceof String) {
doSomethingWithString((String) newObj);
} // etc.
通常,建议不要对从流中读取的所有对象进行此操作。如果您要使用ObjectStreams来建立协议,您应该记录它并坚持下去。这样,如果一方发送的数据不正确,你会在另一方更快地抓住它。
但是,在协议流程中给定点的情况下,期望客户端可能正在发送几种不同类型的对象之一,那么它可能是有意义的。