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 levelCount = result.getLevelCount(); for (Map.Entry entry : levelCount.entrySet()) { System.out.println(" " + entry.getKey() + ": " + entry.getValue()); } // 打印模块错误统计 System.out.println("2. 各模块错误日志数量统计:"); Map moduleErrorCount = result.getModuleErrorCount(); for (Map.Entry entry : moduleErrorCount.entrySet()) { System.out.println(" " + entry.getKey() + ": " + entry.getValue()); } // 打印最早的3条日志 System.out.println("3. 时间戳最早的3条日志:"); List earliestLogs = result.getEarliestLogs(); for (int i = 0; i < earliestLogs.size(); i++) { System.out.println(" " + (i + 1) + ". " + earliestLogs.get(i)); } } }