#
Junjie
1 天以前 e9979c1ab7509295817a13094ba46d8aa13e8f05
#
1个文件已修改
28 ■■■■■ 已修改文件
src/main/java/com/zy/core/task/DevicePingScheduler.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/task/DevicePingScheduler.java
@@ -15,6 +15,7 @@
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
@@ -296,20 +297,32 @@
                    || lower.contains("could not find host")
                    || lower.contains("name or service not known")
                    || lower.contains("temporary failure in name resolution")
                    || lower.contains("general failure")
                    || lower.contains("transmit failed")
                    || value.contains("请求超时")
                    || value.contains("找不到主机")
                    || value.contains("无法访问目标主机")
                    || value.contains("一般故障")
                    || value.contains("传输失败")
                    || value.contains("100.0% 丢失")) {
                return trimMessage(value);
            }
        }
        for (String line : lines) {
            String value = line == null ? "" : line.trim();
            if (!value.isEmpty()) {
            if (!value.isEmpty() && !isPingHeaderLine(value)) {
                return trimMessage(value);
            }
        }
        return "exit=" + exitCode;
    }
    private boolean isPingHeaderLine(String value) {
        String lower = value.toLowerCase();
        return lower.startsWith("ping ")
                || value.startsWith("正在 Ping ")
                || value.contains("字节的数据")
                || value.contains("bytes of data");
    }
    private String trimMessage(String message) {
@@ -330,7 +343,18 @@
        while ((length = inputStream.read(buffer)) != -1) {
            outputStream.write(buffer, 0, length);
        }
        return outputStream.toString(Charset.defaultCharset());
        return outputStream.toString(resolveProcessOutputCharset());
    }
    private Charset resolveProcessOutputCharset() {
        if (isWindows()) {
            try {
                return Charset.forName("GBK");
            } catch (Exception ignored) {
                return Charset.defaultCharset();
            }
        }
        return StandardCharsets.UTF_8;
    }
    private ExecutorService ensureExecutor() {