繁体   English   中英

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

[英]Java TCP Connection From Server through Client

服务器如何通过以前连接到服务器的客户端打开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.

    }
}

我认为您在网络意义上对客户端和服务器有一些基本的误解。

服务器是监听连接的应用程序。 客户端是创建到服务器连接的应用程序。 如果您希望两个应用程序都可以随意启动通信,则您的应用程序必须既是客户端又是服务器。

因此,您的“ DClient”应用程序将需要具有ServerSocket。 然后,“ DClient”应用程序可以在其“ DServer”想要创建连接时通知其“ DServer”应用程序的主机和端口(请注意,如果两个应用程序不在同一网络中,则诸如NATing之类的事情可能会引起问题。 )。

或者,根据您的用例,您可以只打开客户端到服务器的连接。 这是让服务器推送数据的更常用方法。

有一种创建代理服务器的解决方案,该服务器既管理请求客户端,又管理同时为两个客户端请求调用中间件的服务器。 在网络编程中,由于客户端服务器体系结构,必须先启动服务器然后启动客户端请求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM