从服务器到客户端的Java TCP连接

时间:2016-05-29 18:16:36

标签: java sockets tcp client-server

服务器如何通过之前连接到服务器的客户端打开TCP连接?假设我们有简单的服务器,如下面的代码所示;服务器等待客户端连接,处理程序线程服务连接的客户端。客户端如下,每次都想与服务器进行操作,重新建立连接,与服务器通信然后关闭连接。那么,如果服务器想通过客户端打开TCP连接(当客户端与服务器之间没有活动连接时),它是如何完成的?

服务器代码

public class DServer {
    public static void main(String[] args) {
        ServerSocket serverSocket = new ServerSocket(7800);
        while(true) {
            Socket socket = serverSocket.accept();
            System.out.println("Server established a new connection");
            HandleConnection handler = new HandleConnection(socket);
            handler.start();
        }
    }
}

客户代码

public class DClient{
    public static void main(String[] args) {
        Socket socket = new Socket("localhost", 7800);
        ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());
        ObjectInputStream in = new ObjectInputStream(socket.getInputStream());

        //for every operation you do, first reestablish the connection,
        //communicate with server, then close the connection.

    }
}

2 个答案:

答案 0 :(得分:1)

我认为您对客户端是什么以及服务器在网络意义上的含义存在一些根本性的误解。

服务器是监听连接的应用程序。客户端是创建与服务器的连接的应用程序。如果您希望两个应用程序都能够随意启动通信,那么您的应用程序将需要同时是客户端和服务器。

所以你的“DClient”应用程序需要有一个ServerSocket。您“DClient”应用程序然后可以通知您的“DServer”应用程序它的主机和端口,以便“DServer”想要创建连接时(请注意,如果两个应用程序不在同一个网络中,NATing之类的东西可能会出现问题)。

或者,根据您的使用情况,您可以将客户端之间的连接保持打开状态。这是让服务器推送数据的更常用方法。

答案 1 :(得分:0)

有创建代理服务器的解决方案,该服务器管理请求客户端和服务器,它们都为客户端请求调用了中间件。 在网络编程中,由于客户端服务器架构,它必须要求服务器启动然后请求客户端请求。