diff --git a/src/main/java/org/aohe/core/swing/MainWindow.java b/src/main/java/org/aohe/core/swing/MainWindow.java index f15393e..bb09e75 100644 --- a/src/main/java/org/aohe/core/swing/MainWindow.java +++ b/src/main/java/org/aohe/core/swing/MainWindow.java @@ -1,10 +1,12 @@ package org.aohe.core.swing; import lombok.extern.slf4j.Slf4j; +import org.aohe.core.utils.CommandUtils; import org.aohe.core.web.SocketFactory; import javax.swing.*; import java.awt.*; +import java.util.List; @Slf4j public class MainWindow extends JFrame { @@ -55,6 +57,7 @@ public class MainWindow extends JFrame { startButton.addActionListener(e -> { startButton.setEnabled(false); stopButton.setEnabled(true); + CommandUtils.killUsedPort("8997"); initSocket(); setView("服务已打开..."); serviceStatus = true; @@ -125,6 +128,11 @@ public class MainWindow extends JFrame { } } + public boolean checkPort(String port){ + List lsofInfos = CommandUtils.findPort(port); + return !lsofInfos.isEmpty(); + } + public static void setView(String msg){ if(logTextArea != null){ logTextArea.append(msg +"\n"); diff --git a/src/main/java/org/aohe/core/utils/CommandUtils.java b/src/main/java/org/aohe/core/utils/CommandUtils.java index 5a3766c..955a6e5 100644 --- a/src/main/java/org/aohe/core/utils/CommandUtils.java +++ b/src/main/java/org/aohe/core/utils/CommandUtils.java @@ -2,6 +2,8 @@ package org.aohe.core.utils; import cn.hutool.core.util.RuntimeUtil; import cn.hutool.core.util.StrUtil; +import lombok.Data; +import lombok.ToString; import lombok.extern.slf4j.Slf4j; import java.nio.charset.StandardCharsets; @@ -59,4 +61,57 @@ public class CommandUtils { return result; } + public static void killUsedPort(String port){ + List lsofInfos = findPort(port); + for(LsofInfo lsofInfo : lsofInfos){ + destroy(lsofInfo.getPid()); + } + } + + public static List findPort(String port){ + String exec = StrUtil.format("lsof -i:{}",port); + String s = execForStrUtf8Sudo(exec); + return parseCommandOutput(s); + } + + public static void destroy(String pid){ + String exec = StrUtil.format("kill -9 {}",pid); + execForStrUtf8Sudo(exec); + } + + /** + * lsof 格式化 + * @param output s + * @return list + */ + public static List parseCommandOutput(String output) { + List processInfos = new ArrayList<>(); + String[] lines = output.split("\n"); + if(lines.length <= 1){ + return new ArrayList<>(); + } + + for (int i = 1 ; i < lines.length ; i ++) { + //从第一行开始 + String[] parts = lines[i].trim().split("\\s+"); + if (parts.length < 6) { + return new ArrayList<>(); + } + LsofInfo processInfo = new LsofInfo(); + processInfo.setPid(parts[1]); + processInfo.setType(parts[4]); + + processInfos.add(processInfo); + } + + return processInfos; + } + + @Data + @ToString + public static class LsofInfo { + private String pid; + private String type; + } + } diff --git a/src/main/java/org/aohe/core/utils/SystemUtils.java b/src/main/java/org/aohe/core/utils/SystemUtils.java index a24a5c9..07ced75 100644 --- a/src/main/java/org/aohe/core/utils/SystemUtils.java +++ b/src/main/java/org/aohe/core/utils/SystemUtils.java @@ -1,18 +1,11 @@ package org.aohe.core.utils; -import cn.hutool.core.net.Ipv4Util; import cn.hutool.core.net.NetUtil; -import org.aohe.core.sane.utils.SaneSessionUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.net.*; import java.util.Enumeration; -import java.util.List; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.LinkedBlockingQueue; -import java.util.concurrent.ThreadPoolExecutor; -import java.util.concurrent.TimeUnit; public class SystemUtils {