我正在尝试使用JavaSE服务器和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的目的。它归结为:
答案 0 :(得分:2)
不确定您是否已探索过使用REST服务来解决问题,因此我建议您创建REST服务。网上有一些很棒的资源。这是一个链接供您参考。
https://spring.io/guides/gs/rest-service/
这样做,您将能够轻松实现以下目标。
利用HTTP让您的iOS和Android与服务器上的应用程序进行交互。 这不仅意味着您仅将HTTP用于传输层请求,而且您将能够使用该协议进行全面的内容协商,并且您的服务器将控制协商
您在服务器上的资源可以灵活地表示您的选择。
这种方法对您建议的方法有其他好处,但我可以留待您探索。我在下面列出了一些链接供您参考。
REST服务教程 https://www.tutorialspoint.com/restful/index.htm
帮助您避免将此方法与SOAP进行比较 SOAP vs REST (differences)
RESTful Web服务的多层体系结构 https://www.ibm.com/developerworks/library/wa-aj-multitier/