Files
javaSE1001/day02/src/com/inmind/student/张崇昊/LogAnalysisServer.java
2025-12-21 17:24:54 +08:00

106 lines
3.6 KiB
Java

package com.inmind.student.张崇昊;
import java.io.*;
import java.net.*;
import java.util.List;
import java.util.Map;
/**
* 日志分析服务器,负责接收客户端上报的分析结果
*/
public class LogAnalysisServer {
private static final int PORT = 8080;
public static void main(String[] args) {
ServerSocket serverSocket = null;
try {
// 创建服务器Socket并监听端口
serverSocket = new ServerSocket(PORT);
System.out.println("服务器已启动,监听端口 " + PORT + " ...");
while (true) { // 循环接受客户端连接
Socket clientSocket = serverSocket.accept();
System.out.println("接收到客户端连接: " + clientSocket.getInetAddress());
// 为每个客户端连接创建一个新线程处理
new Thread(() -> handleClient(clientSocket)).start();
}
} catch (IOException e) {
System.err.println("服务器启动失败: " + e.getMessage());
e.printStackTrace();
} finally {
if (serverSocket != null) {
try {
serverSocket.close();
System.out.println("服务器已关闭");
} catch (IOException e) {
System.err.println("服务器关闭失败: " + e.getMessage());
}
}
}
}
/**
* 处理客户端连接,接收分析结果并返回响应
*/
private static void handleClient(Socket clientSocket) {
ObjectInputStream in = null;
PrintWriter out = null;
try {
// 获取输入流,读取客户端发送的对象
in = new ObjectInputStream(clientSocket.getInputStream());
Result result = (Result) in.readObject();
// 打印接收的分析结果
printAnalysisResult(result);
// 发送响应
out = new PrintWriter(clientSocket.getOutputStream(), true);
out.println("上报成功");
} catch (IOException | ClassNotFoundException e) {
System.err.println("处理客户端请求出错: " + e.getMessage());
e.printStackTrace();
} finally {
if (clientSocket != null) {
try {
clientSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
* 打印分析结果到控制台
*/
private static void printAnalysisResult(Result result) {
System.out.println("\n===== 接收到的日志分析结果 =====");
// 打印级别统计
System.out.println("1. 各级别日志数量统计:");
Map<String, Long> levelCount = result.getLevelCount();
for (Map.Entry<String, Long> entry : levelCount.entrySet()) {
System.out.println(" " + entry.getKey() + ": " + entry.getValue());
}
// 打印模块错误统计
System.out.println("2. 各模块错误日志数量统计:");
Map<String, Long> moduleErrorCount = result.getModuleErrorCount();
for (Map.Entry<String, Long> entry : moduleErrorCount.entrySet()) {
System.out.println(" " + entry.getKey() + ": " + entry.getValue());
}
// 打印最早的3条日志
System.out.println("3. 时间戳最早的3条日志:");
List<Log> earliestLogs = result.getEarliestLogs();
for (int i = 0; i < earliestLogs.size(); i++) {
System.out.println(" " + (i + 1) + ". " + earliestLogs.get(i));
}
}
}