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