通过传入host(ip)和port(端口号),然后利用他们创建对象,如果可以创建,则没有占用,否则被占用了。
当没有这个端口号时会报错,于是我把catch中的打印堆栈信息删了。
public static boolean isPortUsing(String host,int port) throws UnknownHostException {
boolean flag = true;
InetAddress Address = InetAddress.getByName(host);
try {
new Socket(Address,port); //建立一个Socket连接
flag = false;
} catch (IOException e) {
}
return flag;
}
发现这个方法的一个问题,当按照以上方法做了之后可能会报端口被占用的错误,因此。应该在上述代码中加上finally关闭这个端口。
当端口地址未被使用时返回为true,反之返回为false.
优化后为
public static boolean isPortUsing(int port) throws UnknownHostException {
boolean flag = true;
ServerSocket server=null;
try {
server=new ServerSocket (port); //建立一个Socket连接
flag = false;
} catch (IOException e) {
}finally{
if(server!=null){
server.close;//自己处理一下异常
}
}
return flag;
}