有两个方法测试可用端口号
1. 用new socket(address,port)
如果port被绑定,则会被IOException捕获,就可以在catch中处理。
如果没有被绑定,则直接输出端口就行
2.用new DatagramSocket(port)
原理和第一个方法一样
这个方法只能测试本地主机,但比较快捷,而且代码简单
另外端口1~5000已被只固定业务,所以只用测试5001~65535
import java.io.IOException;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.Socket;
import java.net.SocketException;
import java.net.UnknownHostException;
public class PortScan {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
InetAddress inet=null;
try {
inet=InetAddress.getByName("127.0.0.1");
} catch (UnknownHostException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
System.out.println("Scanning ports");
for(int i=5001;i<65536;i++){
// try {
// Socket s=new Socket(inet,i);
//
// System.out.println("enabled port:"+i);
//
//
// } catch (IOException e) {
// // TODO Auto-generated catch block
// //e.printStackTrace();
// System.out.println("busy port:"+i);
// }
try {
DatagramSocket ds=new DatagramSocket(i);
System.out.println("enabled port:"+i);
} catch (SocketException e) {
// TODO Auto-generated catch block
//e.printStackTrace();
System.out.println("busy port:"+i);
}
}
}
}