我制作了一个简单的Java套接字程序,可以将文本从一台计算机发送到另一台计算机。
代码:
Scanner scan = new Scanner(System.in);
System.out.println("Starting Server...");
ServerSocket server = new ServerSocket(7777);
程序将套接字绑定到上面代码示例中第3行的端口7777。 但是,此程序有时会返回BindException。为了解决这个问题,我在绑定发生之前添加了这行代码:
Runtime.getRuntime().exec("lsof -t -i:7777 | xargs kill");
所以,总之:
Scanner scan = new Scanner(System.in);
System.out.println("Starting Server...");
Runtime.getRuntime().exec("lsof -t -i:7777 | xargs kill");
ServerSocket server = new ServerSocket(7777);
此 运行shell命令以终止在端口7777上运行的所有进程。 但是,它并没有。如果在Terminal.app中键入相同的命令,它可以工作,如果我使用与上面示例的第4行相同的语法并使用不同的命令,例如"说出问候",该命令有效,但不能杀死一个。
所以,
感谢。
答案 0 :(得分:8)
Runtime.exec
将不通过shell启动命令,而在使用管道时则需要这样做。试试这个:
Runtime.getRuntime().exec(
new String[]{"sh","-c","lsof -t -i:7777 | xargs kill"},
null, null);
我需要等待完成才能继续执行,请使用Process.waitFor
:
Process p = Runtime.getRuntime().exec(
new String[]{"sh","-c","lsof -t -i:7777 | xargs kill"},
null, null);
int exitCode = p.waitFor()