Java 如何通过网络发送消息?

Java 如何通过网络发送消息?,java,networking,client-server,Java,Networking,Client Server,我希望能够通过网络发送简单的消息。任何消息 具体地说,我需要一个始终运行的服务器,以及一个可以按需连接到服务器并与之通信的客户端 我不知道从哪里开始。通过网络发送消息的最简单方法是什么?从本教程开始,您可以从一个简单的方法开始,该方法使用like so 然后您可以使用“telnet localhost 4444”来测试它,或者编写整个客户端;可能与上面教程中的客户机类似。从教程开始,您可以从一个简单的开始,它使用like so 然后您可以使用“telnet localhost 4444”来测试它

我希望能够通过网络发送简单的消息。任何消息

具体地说,我需要一个始终运行的服务器,以及一个可以按需连接到服务器并与之通信的客户端


我不知道从哪里开始。通过网络发送消息的最简单方法是什么?

从本教程开始,您可以从一个简单的方法开始,该方法使用like so


然后您可以使用“telnet localhost 4444”来测试它,或者编写整个客户端;可能与上面教程中的客户机类似。

从教程开始,您可以从一个简单的开始,它使用like so


然后您可以使用“telnet localhost 4444”来测试它,或者编写整个客户端;也许就像上面教程中的客户机一样。

好的,这个问题是非常开放的。首先有几个问题需要回答:您想实现自己的服务器还是使用现有的技术。在后一种情况下,JMS-API将是一个起点。存在许多实现提供者,Glassfish本身中的参考实现,HornetQ都是独立的或作为JBoss实例的一部分,仅举两个例子。在理解一些基本概念时,使用JMS发送消息非常简单,它们可以包含文本数据和二进制数据。
使用现有解决方案的另一种方法是实现您的客户端可以连接到的Web服务,这将是基于REST的Web服务的JAX-RS,例如,这种方法也更独立于平台,在撰写本文时,我还不知道支持JMS的Android客户端库,大多数其他编程语言都完全支持基于REST的服务。当您不想使用任何现有的protocoll时,您必须坚持使用自己的服务器和客户机实现。这就是所提到的套接字编程。好吧,这项任务并不容易:您不需要让服务器同时处理多个客户端,也不需要在另一个请求完成之前阻止一个请求,而是提供一些机制来授权客户端对服务器进行应用程序访问。当同时处理多个客户机时,您可能会在服务器上拥有在客户机之间共享的资源,因此对这些资源的访问必须同步,这些主题与并发编程有关,并且是信息技术本身一个非常有趣的领域。应用程序设计的其他有趣方面可能是决定使用支持JNDI的资源绑定或实现CDI容器,以便客户端可以轻松地调整消息交换格式。这很有趣,但不是一天之内的任务

好吧,这个问题真的很悬而未决。首先有几个问题需要回答:您想实现自己的服务器还是使用现有的技术。在后一种情况下,JMS-API将是一个起点。存在许多实现提供者,Glassfish本身中的参考实现,HornetQ都是独立的或作为JBoss实例的一部分,仅举两个例子。在理解一些基本概念时,使用JMS发送消息非常简单,它们可以包含文本数据和二进制数据。
使用现有解决方案的另一种方法是实现您的客户端可以连接到的Web服务,这将是基于REST的Web服务的JAX-RS,例如,这种方法也更独立于平台,在撰写本文时,我还不知道支持JMS的Android客户端库,大多数其他编程语言都完全支持基于REST的服务。当您不想使用任何现有的protocoll时,您必须坚持使用自己的服务器和客户机实现。这就是所提到的套接字编程。好吧,这项任务并不容易:您不需要让服务器同时处理多个客户端,也不需要在另一个请求完成之前阻止一个请求,而是提供一些机制来授权客户端对服务器进行应用程序访问。当同时处理多个客户机时,您可能会在服务器上拥有在客户机之间共享的资源,因此对这些资源的访问必须同步,这些主题与并发编程有关,并且是信息技术本身一个非常有趣的领域。应用程序设计的其他有趣方面可能是决定使用支持JNDI的资源绑定或实现CDI容器,以便客户端可以轻松地调整消息交换格式。这很有趣,但不是一天之内的任务

欢迎来到StackOverflow,我对这个问题投了赞成票,原因如下:这实际上是一个非常明确和谨慎的问题。他问的是一个非常简单的问题,
如何通过网络发送消息
实现这一点的方法可能有很多种,但只要只有一种方法就可以解决问题。服务器应该是多线程的,不一定要多线程,但可能更简单,并且应该始终侦听新的连接。当它收到一个新的连接时,将其放入一个新的线程,去做它的业务,然后监听另一个连接。在那里寻找教程,你会找到答案的。通过练习和尝试新技术,你会发现哪些有效,哪些无效。我上面列出的选项只是您项目的众多解决方案之一。祝你好运:)欢迎来到StackOverflow,我把这个问题投了赞成票,原因如下:这实际上是一个非常明确和谨慎的问题。他问的是一个非常简单的问题,
如何通过网络发送消息
实现这一点的方法可能有很多种,但只要只有一种方法就可以解决问题。服务器应该是多线程的,不一定要多线程,但可能更简单,并且应该始终侦听新的连接。当它收到一个新的连接时,将其放入一个新的线程中
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();
}