Spring Boot 实现 Socket 连接
在现代应用程序中,Socket 通信是一种常见的方式,它允许不同的计算机通过网络进行数据交换。在 Spring Boot 中实现 Socket 是一项重要的技能,不论是在构建实时聊天应用,还是在处理后端服务之间的通信时,这一功能都是必不可少的。本文将通过代码示例向您展示如何在 Spring Boot 中实现基础的 Socket 连接。
Socket 简介
Socket 是网络中的一个基础组件,它为不同主机之间的通信提供了端点。每个 Socket 都有一个 IP 地址和一个端口号。通信过程分为客户端和服务端,客户端请求连接,服务器端接受连接并进行数据交互。
环境准备
在开始之前,请确保您已在本地环境中安装了 JDK 和 Maven,并创建一个 Spring Boot 项目。
代码示例
接下来,我们将创建一个简单的 Socket 服务器和客户端应用程序。我们会使用 ServerSocket
类来创建服务器端,以及 Socket
类来创建客户端。
服务器端代码
首先是服务器端代码,我们需要创建一个 REST 控制器以及一个 SocketServer
类。
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
@SpringBootApplication
public class SocketServerApplication implements CommandLineRunner {
public static void main(String[] args) {
SpringApplication.run(SocketServerApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
ServerSocket serverSocket = new ServerSocket(12345);
System.out.println("Server is listening on port 12345");
while (true) {
Socket socket = serverSocket.accept();
System.out.println("New client connected");
// Handle the client in a new thread
new ClientHandler(socket).start();
}
}
private static class ClientHandler extends Thread {
private final Socket socket;
public ClientHandler(Socket socket) {
this.socket = socket;
}
public void run() {
try {
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
String message;
while ((message = in.readLine()) != null) {
System.out.println("Received: " + message);
out.println("Echo: " + message);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
客户端代码
接下来是客户端代码,它将连接到服务器并发送消息。
import java.io.*;
import java.net.Socket;
public class SocketClient {
public static void main(String[] args) {
try {
Socket socket = new Socket("localhost", 12345);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
// Sending a message to Server
out.println("Hello Server!");
// Receiving a response from Server
String response = in.readLine();
System.out.println("Server response: " + response);
// Cleanup
in.close();
out.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
类图
以下是我们在上述代码中使用的类的结构:
classDiagram
class SocketServerApplication {
+main(String[] args)
+run(String... args)
}
class ClientHandler {
-Socket socket
+ClientHandler(Socket socket)
+run()
}
运行程序
- 先运行
SocketServerApplication
类,您的服务器将在标准输入上等待连接。 - 然后运行
SocketClient
,观察消息的发送和接收。
结论
通过以上示例,您可以看到如何在 Spring Boot 中实现基本的 Socket 通信。Socket 连接为实时通信提供了一种高效且灵活的方法。这一基础元素为您后续开发复杂应用程序奠定了良好的基础。希望这篇文章能帮助您更好地理解 Socket 在 Spring Boot 中的实现与应用。未来,您可以结合更复杂的业务逻辑和数据处理,进一步拓展这一主题。