我想检查端口是否正在使用。我使用了命令:netstat -an | grep <port_no> | grep -i listen
。当我通过运行if(message_port_check.equals(null))
来比较其输出时,始终返回null
。我怎么知道端口是否打开?
这就是我尝试过的,
String port_no = textField_3.getText().toString();
String[] command_port = {
"/bin/sh",
"-c",
"netstat -an | grep " + port_no + " | grep -i listen"
};
try {
ProcessBuilder builder = new ProcessBuilder(command_port);
builder.redirectErrorStream(true);
Process p = builder.start();
BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
StringBuffer buffer = new StringBuffer();
String line = "";
while (true)
{
buffer.append(line).append("\n");
line = r.readLine();
if (line == null) { break; }
}
message_port= buffer.toString();
p.waitFor();
r.close();
}
catch (IOException e1)
{
e1.printStackTrace();
}
catch (InterruptedException e1)
{
e1.printStackTrace();
}
if(message_port_check.equals(null))
rdbtn_port_free.setSelected(true);
else
rdbtn_port_notfree.setSelected(true);
答案 0 :(得分:1)
您可以使用nc,如this reply所示。然后你只需要检查返回值。
当然在Java中,独立于平台的精神解决方案是尝试使用标准库连接/绑定到端口,而不是依赖外部Linux二进制文件。显示了一些变体here。
答案 1 :(得分:1)
我使用-z
测试:
$ output=$(netstat -an | grep your_port | grep -i listen)
$ if [ -z "$output" ] ; then echo empty ; fi
empty