socket通过客户端从服务器连接到Java TCP
服务器如何通过之前连接到服务器的客户端打开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.
}
}
# 1 楼答案
有一种解决方案可以创建代理服务器,它可以同时管理请求客户端和服务器,这两种服务器都为客户端请求调用中间件。 在网络编程中,由于客户机-服务器体系结构,必须先启动服务器,然后启动客户机请求
# 2 楼答案
我认为你对什么是客户机和什么是网络意义上的服务器有一些基本的误解
服务器是监听连接的应用程序。客户端是创建到服务器的连接的应用程序。如果您希望两个应用程序都能够随意启动通信,那么您的应用程序需要同时是客户端和服务器
因此,您的“DClient”应用程序需要有一个ServerSocket。然后,当“DServer”想要创建连接时,“DClient”应用程序可以通知“DServer”应用程序它的主机和端口(请注意,如果两个应用程序不在同一网络中,像NATing这样的事情可能会使这类事情成问题)
或者,根据您的用例,您可以保持从客户端到服务器的连接处于打开状态。这是让服务器推送数据的更常见的方法