用Java发送和接收序列化对象 - 套接字编程

时间:2011-09-21 19:17:41

标签: java sockets serialization client-server

(我知道这可以在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 而不是我的对象序列化方法?

提前感谢。

由于

1 个答案:

答案 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来建立协议,您应该记录它并坚持下去。这样,如果一方发送的数据不正确,你会在另一方更快地抓住它。

但是,在协议流程中给定点的情况下,期望客户端可能正在发送几种不同类型的对象之一,那么它可能是有意义的。