基于java 封装tcp sockeet连接永久 监听消息
时间: 2024-01-16 16:02:32 浏览: 123
要基于Java封装一个TCP Socket连接并实现永久监听消息的功能,你可以使用多线程来实现。
首先,创建一个名为`TcpSocketServer`的类来封装服务器端的功能:
```java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class TcpSocketServer {
private ServerSocket serverSocket;
private Thread listenerThread;
public TcpSocketServer(int port) {
try {
serverSocket = new ServerSocket(port);
// 创建线程用于监听客户端连接
listenerThread = new Thread(new ConnectionListener());
listenerThread.start();
} catch (IOException e) {
e.printStackTrace();
}
}
private void handleClient(Socket clientSocket) {
try (
BufferedReader reader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
PrintWriter writer = new PrintWriter(clientSocket.getOutputStream(), true)
) {
String message;
while ((message = reader.readLine()) != null) {
System.out.println("收到来自客户端的消息: " + message);
// 回复消息
writer.println("服务器已收到消息: " + message);
}
} catch (IOException e) {
e.printStackTrace();
}
}
public void close() {
try {
listenerThread.interrupt(); // 停止监听线程
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
private class ConnectionListener implements Runnable {
@Override
public void run() {
try {
while (true) {
// 等待客户端连接
Socket clientSocket = serverSocket.accept();
System.out.println("客户端已连接: " + clientSocket.getInetAddress().getHostAddress());
// 处理客户端请求
Thread clientThread = new Thread(() -> handleClient(clientSocket));
clientThread.start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
```
然后,你可以使用`TcpSocketServer`类来创建一个服务器实例,并持续监听客户端的消息:
```java
public class Main {
public static void main(String[] args) {
TcpSocketServer server = new TcpSocketServer(1234);
// 持续监听客户端消息
while (true) {
// 可以添加其他逻辑或命令来控制服务器行为
}
// 关闭服务器
server.close();
}
}
```
以上代码创建了一个TCP Socket服务器,监听指定的端口号。它会在一个单独的线程中等待客户端的连接请求,并在接收到客户端连接后,创建一个新的线程来处理客户端的消息。服务器会将接收到的消息打印出来,并回复一个简单的确认消息给客户端。
请根据你的实际需求修改代码,并处理可能出现的异常情况。你可以在`handleClient()`方法中添加自定义的处理逻辑,例如将接收到的消息存储到数据库中或执行其他操作。同样,你可以在`main()`方法中添加其他逻辑或命令来控制服务器行为。
阅读全文