繁体   English   中英

如何将JavaSE客户端连接到JavaEE服务器并发送Serializable对象?

[英]How to connect a JavaSE client to JavaEE server and send a Serializable object?

我正在尝试使用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,但我似乎无法使用Sockets连接。 我怀疑我需要在Sockets中实现HTTP内容,但是如何发送对象?

我也在考虑使用@Startup Bean并打开ServerSocket,但是看来我必须自己处理线程,这将使使用JavaEE的目的遭到破坏。 归结为:

  • 如何启动多个JavaSE客户端可以同时连接的JavaEE Bean?
  • 如何在JavaEE服务器和JavaSE客户端之间来回发送可序列化对象或类似JSON之类的对象?

不知道您是否探索过使用REST服务来解决您的问题,所以我建议您创建REST服务。 网上有一些很棒的资源。 这是一个供您参考的链接。

https://spring.io/guides/gs/rest-service/

这样做,您将可以轻松实现以下目标。

  1. 利用HTTP使iOS和Android与服务器上的应用程序进行交互。 这不仅意味着您仅将HTTP用于传输层请求,还可以使用协议进行全面的内容协商,并且服务器将控制协商

  2. 您在服务器上的资源将灵活地代表您的选择。

这种方法对您建议的方法还有其他好处,但我留待您自己研究。 我在下面列出了一些链接供您参考。

REST服务教程https://www.tutorialspoint.com/restful/index.htm

为了帮助您避免将此方法与SOAP SOAP和REST(差异)进行比较

RESTful Web服务的多层体系结构https://www.ibm.com/developerworks/library/wa-aj-multitier/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM