我希望能够通过网络发送简单的消息。任何消息。
具体来说,我想要一个一直在运行的服务器,以及一个可以根据需要连接到服务器并与之通信的客户端。
我不知道从哪里开始。通过网络发送消息的最简单方法是什么?
答案 0 :(得分:2)
从教程Reading from and Writing to a Socket开始,您可以从使用echo server的简单ServerSocket开始,
public static void main(String[] args) throws Exception {
// create socket
int port = 4444;
ServerSocket serverSocket = new ServerSocket(port);
System.err.println("Started server on port " + port);
// repeatedly wait for connections, and process
while (true) {
// a "blocking" call which waits until a connection is requested
Socket clientSocket = serverSocket.accept();
System.err.println("Accepted connection from client");
// open up IO streams
BufferedReader in = new BufferedReader(new InputStreamReader(
clientSocket.getInputStream()));
PrintWriter out = new PrintWriter(clientSocket.getOutputStream());
// waits for data and reads it in until connection dies
// readLine() blocks until the server receives a new line from
// client
String s;
try {
while ((s = in.readLine()) != null) {
out.println(s);
out.flush();
}
} catch (Exception e) {
e.printStackTrace();
}
// close IO streams, then socket
System.err.println("Closing connection with client");
out.close();
in.close();
clientSocket.close();
}
然后你可以使用“telnet localhost 4444”来测试它,或写一个完整的客户端;也许就像上面教程中的客户端一样。
答案 1 :(得分:2)
好的,这个问题非常开放。首先,有几个问题需要回答:您是要实现自己的服务器还是使用现有技术。 JMS-API显然将成为后一种情况的起点。存在许多实现提供程序,Glassfish本身的参考实现,HornetQ既可以是独立的,也可以作为JBoss实例的一部分,仅举两个例子。在理解一些基本概念时,使用JMS发送消息非常简单,它们可以包含文本和二进制数据。 使用现有解决方案的另一种方法是实现客户端可以连接的WebService,这将是基于REST的Web服务的JAX-RS,例如:这种方法也更具独立性,在撰写本文时我不知道支持JMS的Android客户端库,而且大多数其他编程语言都完全支持基于REST的服务。但是,当您不想使用任何现有协议时,您必须坚持使用自己的服务器和客户端实现。所以这就是提到的套接字 - 编程。好吧,这个任务并不容易:你的服务器不会同时处理多个客户端,在另一个请求完成之前不会阻塞一个请求,提供一些机制来授权客户端对服务器进行应用程序访问。当您同时处理多个客户端时,您将拥有在服务器上的客户端之间共享的资源,因此必须同步对此资源的访问,这些主题与并发编程相关,并且是其自身信息技术的一个安静有趣的领域。应用程序设计的其他有趣方面可能是使用支持JNDI进行资源绑定或实现CDI容器的决策,以便客户端可以轻松地调整您的消息交换格式。这很有趣,但不是一天内的任务。 ;)