其中包含一个服务器(节点A)和一个客户端(节点B)。在这个例子中,服务器会监听来自客户端的连接请求,并接收客户端发送的消息。客户端会连接到服务器并发送一条消息。
服务器端代码(节点A)
import java.io.*;
import java.net.*;
public class DistributedServer {
public static void main(String[] args) throws IOException {
// 创建一个ServerSocket对象,监听本地的12345端口
ServerSocket serverSocket = new ServerSocket(12345);
System.out.println("Server started and listening on port 12345");
while (true) {
// 等待客户端连接
Socket clientSocket = serverSocket.accept();
System.out.println("Client connected: " + clientSocket.getInetAddress());
// 获取输入和输出流
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
// 读取客户端发送的消息
String message = in.readLine();
System.out.println("Received message from client: " + message);
// 向客户端发送响应
out.println("Message received and processed by server.");
// 关闭连接
clientSocket.close();
}
}
}
客户端端代码(节点B)
import java.io.*;
import java.net.*;
public class DistributedClient {
public static void main(String[] args) throws IOException {
// 创建一个Socket对象,连接到服务器的12345端口
Socket clientSocket = new Socket("localhost", 12345);
System.out.println("Connected to server");
// 获取输出和输入流
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
// 向服务器发送消息
out.println("Hello from client!");
// 读取服务器响应
String response = in.readLine();
System.out.println("Server response: " + response);
// 关闭连接
clientSocket.close();
}
}
运行示例
- 首先,编译并运行服务器端代码。
- 然后,在另一个终端或命令行窗口中,编译并运行客户端端代码。
客户端会连接到服务器,并发送一条消息。服务器会接收消息,处理它(在这个简单的例子中只是打印出来),然后发送一条响应回客户端。客户端会接收并打印服务器的响应。
请注意,这个示例是一个同步阻塞的模型,即客户端在发送消息后会等待服务器的响应。在更复杂的分布式系统中,你可能需要考虑使用异步通信、消息队列、并发处理、容错机制等高级特性。此外,为了处理节点间的大规模通信和协作,你可能会使用专门的分布式系统框架,如Apache Hadoop、Apache Spark或Kubernetes等。
运行结果
启动服务端A
启动客户端B