我正在尝试使用 JavaEE 服务器和 JavaSE 客户端(可能还有在 Android 和 IOS 上运行的客户端)构建应用程序。我希望客户端能够将可序列化的对象或类似的对象发送到服务器。然后服务器应该执行一些操作并向客户端发送响应。我不知道从哪里开始,但我试图在下面概述我的意图。
我并不是在寻找完整的代码来实现这一点,而是寻找一些指针和确认(或反驳)我是否走在正确的轨道上。也许是一个起点:)
我有一个可序列化的类,如下所示:
public class TestMessage implements Serializable {
public String str;
}
在客户端我想做这样的事情:
try {
InetAddress address = InetAddress.getByName(
new URL("http://127.0.0.1/hello").getHost());
Socket connection = new Socket(address, 46588);
connection.setSoTimeout(5000);
try (ObjectOutputStream outgoing = new ObjectOutputStream(
new BufferedOutputStream(connection.getOutputStream()
))) {
TestMessage test = new TestMessage();
test.str = "Hello World";
outgoing.writeObject(test);
outgoing.flush();
}
} catch (UnknownHostException ex) {
System.out.println("Unknown Host...");
} catch (IOException ex) {
System.out.println("i/o exception...");
}
我想我可以使用 @ServerEndpoint Bean,但这会创建一个 WebSocket,我似乎无法使用套接字连接到它。我怀疑我需要在套接字中实现 HTTP 内容,但是如何发送我的对象呢?
我还考虑使用 @Startup Bean 并打开 ServerSocket,但似乎我必须自己处理线程,这有点违背了使用 JavaEE 的目的。归结起来就是:
- 如何启动多个 JavaSE 客户端可以同时连接的 JavaEE Bean?
- 如何在 JavaEE 服务器和 JavaSE 客户端之间来回发送可序列化对象或类似的对象(例如 JSON)?
最佳答案
不确定您是否尝试过使用 REST 服务来解决您的问题,因此我建议创建 REST 服务。网上有一些很棒的资源。这是一个链接供您引用。
https://spring.io/guides/gs/rest-service/
这样做,您将能够轻松实现以下目标。
利用 HTTP 使您的 iOS 和 Android 与服务器上的应用程序进行交互。 这不仅仅意味着您仅将 HTTP 用于传输层请求,而且您将能够使用该协议(protocol)进行全面的内容协商,并且您的服务器将控制协商
服务器上的资源将根据您的选择灵活表示。
与您建议的方法相比,这种方法还有其他好处,但我将其留给您探索。我在下面列出了一些链接供您引用。
REST 服务教程 https://www.tutorialspoint.com/restful/index.htm
帮助您避免将此方法与 SOAP 进行比较 SOAP vs REST (differences)
RESTful Web 服务的多层架构 https://www.ibm.com/developerworks/library/wa-aj-multitier/
关于java - 如何将 JavaSE 客户端连接到 JavaEE 服务器并发送可序列化对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41313144/