使用Java通过网络发送对象

使用Java通过网络发送对象,java,network-programming,Java,Network Programming,我试图通过物理网络(而不是本地主机)发送java对象,但似乎有什么地方出错了 对象的接口(客户端和服务器具有以下特性): 我尝试发送的对象(只有服务器有此项): 服务器: private ObjectToSend obj = new ObjectToSend(); obj_out_stream.writeObject(obj); obj_out_stream.flush(); 客户: private distributable ReceivedObj = null; try {

我试图通过物理网络(而不是本地主机)发送java对象,但似乎有什么地方出错了

对象的接口(客户端和服务器具有以下特性):

我尝试发送的对象(只有服务器有此项):

服务器:

private ObjectToSend obj = new ObjectToSend();

obj_out_stream.writeObject(obj);
obj_out_stream.flush();
客户:

private distributable ReceivedObj = null;

try {
       ReceivedObj = (distributable) obj_in_steam,readObject();
} catch (ClassNotFoundException e) {
       System.err.println("Error<w_console>: Couldn't recieve application code!");
} 
ReceivedObj.test();
private distributable ReceivedObj=null;
试一试{
ReceivedObj=(可分配)对象在蒸汽中,readObject();
}catch(classnotfounde异常){
System.err.println(“错误:无法接收应用程序代码!”);
} 
ReceivedObj.test();

ObjectToSend
类实现Serializable时,一切都正常,我没有使用接口,因为我的所有类都在一个目录中,所以客户端“知道”该对象。现在我想让它跨物理网络工作,这样客户端就只有对象的接口。客户端似乎无法接收对象,因为每次都会抛出异常

应该是这样的。对于没有代码的类,您可以做什么


看看这里:stackoverflow.com/questions/8175052/java多态性我的老师声称你可以分发一个可执行对象thr,应该是这样的。对于没有代码的类,您可以做什么


看看这里:stackoverflow.com/questions/8175052/java多态性我的老师声称您可以分发一个可执行对象thr

以能够使用objectinput/outputstream序列化和反序列化对象类必须实现可序列化


此外,反序列化程序必须能够在您尝试反序列化的类路径上找到类,因为它嵌入在序列化表单中。

要能够使用objectinput/outputstream序列化和反序列化对象,类必须实现Serializable


此外,反序列化程序必须能够在您尝试反序列化的类路径上找到类,因为它嵌入在序列化表单中。

如果您希望客户端在编译时只有接口,那么您需要在运行时从服务器下载实际的类


(又称ApacheRiver)简化了这一过程。

如果希望客户端在编译时只有接口,则需要在运行时从服务器下载实际的类


(又称ApacheRiver)使这变得容易。

正如其他答案所建议的,客户端还必须知道要发送的对象的类

通常,我们会为这样一个典型的客户机-服务器示例创建三个包/项目:

通用:客户端和服务器使用的代码;要从服务器发送到客户端的对象的类定义属于此处

客户机:只有客户机需要知道的所有代码


服务器:所有代码只有服务器需要知道,正如其他答案所建议的,客户端还必须知道要发送的对象的类别

通常,我们会为这样一个典型的客户机-服务器示例创建三个包/项目:

通用:客户端和服务器使用的代码;要从服务器发送到客户端的对象的类定义属于此处

客户机:只有客户机需要知道的所有代码


服务器:只有服务器需要知道的所有代码

如果你不知道铅笔是什么,你是否知道铅笔是书写工具并不重要。发送只知道其接口的对象不起作用,因为您仍然需要知道该对象是什么。接口不能代替类定义。注意:Java类和接口的名称应以大写字母开头。此外,你的代码中充满了错误,这意味着你没有真正使用过它:修复它,再试一次,并添加更多关于错误的细节。如果你不知道铅笔是什么,你是否知道铅笔是书写工具并不重要。发送只知道其接口的对象不起作用,因为您仍然需要知道该对象是什么。接口不能代替类定义。注意:Java类和接口的名称应以大写字母开头。此外,您的代码中充满了错误,这意味着您没有真正使用它:修复它,再试一次,并添加有关错误的更多详细信息。这正是我的情况,读了这篇文章,我认为我的方向是正确的,“使用此技术,您只需要向客户端和服务器提供接口的副本,而不需要实现”但我知道我会寻找一种不同的方法。这正是我的情况,读了这篇文章我认为我的方向是正确的,“使用这种技术,您只需要向客户端和服务器提供接口的副本,而不需要实现”但是我知道我会寻找一种不同的方法,我的目标是开发一个分布式框架,在这个框架中客户端可以接收一个类并使用它进行一些计算。因为这纯粹是一个学习练习,所以我想自己开发它。我的目标是开发一个分布式框架,在这个框架中,客户端可以接收一个类并使用它进行一些计算。因为这纯粹是一个学习练习,所以我想自己开发一下。
private ObjectToSend obj = new ObjectToSend();

obj_out_stream.writeObject(obj);
obj_out_stream.flush();
private distributable ReceivedObj = null;

try {
       ReceivedObj = (distributable) obj_in_steam,readObject();
} catch (ClassNotFoundException e) {
       System.err.println("Error<w_console>: Couldn't recieve application code!");
} 
ReceivedObj.test();