【问题标题】:How to implement a client server where they both communicate independently如何实现它们都独立通信的客户端服务器
【发布时间】:2015-08-22 18:03:52
【问题描述】:

我正在尝试使用套接字在 java 中实现客户端服务器系统。在我开始编码之前,我想做一些计划,但我对如何实现以下系统有点困惑。我对 Java 中的 Sockets 和 ServerSockets 有一些但知之甚少的知识。

客户端会不断地向服务器发送关于客户端当前状态的数据,服务器只记录这个(显示给用户)。

服务器将根据用户的输入向客户端发出命令。

因此,客户端和服务器都需要同时监听和发送数据。为此,我需要一个 Socket(用于发送数据)和一个 ServerSocket(用于侦听数据)在两个设备上都打开,每个设备都在单独的线程中运行?

如果是这种情况,我必须使用两个不同的端口还是可以使用同一个?

【问题讨论】:

    标签: java multithreading sockets


    【解决方案1】:

    服务器使用 one ServerSocket 等待新客户端。每个客户端都有自己的Socket,带有输入和输出流。我会为 ServerSocket 使用一个线程,每个客户端使用一个线程来监听传入的消息。

    【讨论】:

    • 客户端有它的 Socket 端。唯一拥有端口的是服务器的监听ServerSocket,所以不需要多个端口。
    【解决方案2】:

    您应该在服务器上打开一个 ServerSocket。这会监听来自客户端的连接。每个客户端使用一个常规的 Socket 连接到服务器。对于每个连接的客户端,服务器将使用 ServerSocket.accept() 方法从其 ServerSocket 中获取一个常规的 Socket。 ServerSocket 只监听一个端口;所有客户端都连接到同一个服务器端口。

    在每个连接的每个端点,只需要一个 Socket。您将从 Socket.getOutputStream() 方法获得一个 OutputStream 来发送数据,并从 Socket.getInputStream() 方法获得一个 InputStream 来在连接上发送数据。

    【讨论】:

      【解决方案3】:

      这将形成点对点架构,其中一个节点将根据情况同时充当服务器和客户端。

      其次,您将在两个节点上编写服务器和客户端代码。将使用一个端口,因为端口是在服务器上而不是在客户端上捕获的,并且在一个节点上您只部署了一台服务器,因此一个端口就可以了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-26
        • 2011-09-05
        相关资源
        最近更新 更多