我已经学习了创建套接字和 RMI 的基础知识。
问题是套接字可以用来做什么?我在 SO 中看到了这篇关于使用套接字将字符串对象发送到服务器程序的帖子。
那么,在服务器中得到这个String对象后,我可以访问数据库并存储它吗?而当客户端需要访问这个字符串对象时,服务器如何检索它的数据库并将其发送给客户端?这可以仅使用套接字来完成吗?
我知道我们可以使用 RMI 做到这一点。
我已经学习了创建套接字和 RMI 的基础知识。
问题是套接字可以用来做什么?我在 SO 中看到了这篇关于使用套接字将字符串对象发送到服务器程序的帖子。
那么,在服务器中得到这个String对象后,我可以访问数据库并存储它吗?而当客户端需要访问这个字符串对象时,服务器如何检索它的数据库并将其发送给客户端?这可以仅使用套接字来完成吗?
我知道我们可以使用 RMI 做到这一点。
好吧,您可以序列化您的 Java 对象,创建一个可以通过套接字连接发送的流,然后读取该流并对其进行反序列化。这+一些实用程序基本上就是 RMI 所做的。但是如果你愿意的话,你可以自己做。
像这样的东西:
InputStream is = socket.getInputStream();
ObjectInputStream ois = new ObjectInputStream(is);
TestObj obj = (TestObj)ois.readObject();
class TestObj implements Serializable {
//your class
}
套接字提供对网络流的低级访问,几乎所有其他东西都建立在Socket
实例ServerSocket
之上。
RMI 使用套接字来实现一个标准协议,供 RMI 服务器和 RMI 客户端进行通信。
基本上使用套接字你可以实现任何基于网络的东西,只要它在 TCP 上运行(或者如果你使用DatagramSocket
实例,则为 UDP)
在这种情况下,如果您需要额外的性能,您将使用套接字,因为您没有 RMI 协议的开销来减慢通信速度。
在 RMI 中,您将返回一个字符串,并且所有内容都将由 RMI 为您包装,但如果您使用套接字,则使用ObjectOutputStream
来自服务器的字符串序列化字符串并ObjectInputStream
在客户端使用反序列化。