106 lines
3.6 KiB
Java
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));
|
|
}
|
|
|
|
}
|
|
} |