java 检测可用端口

时间:2020-12-30 15:20:26

---恢复内容开始---

检测本机正在使用的服务端口,尽量快完成,计算消耗时间:

轮询:

 1 public class test implements Runnable {
 2     //private static String host="210.39.3.164";
 3     private static int i=0;
 4     static Date one,two;
 5     public synchronized int get(){
 6         if(i>=1024)notifyAll();
 7         return i++;
 8     }
 9     
10     public static void main(String argv[]){
11         one=new Date();
12         //long time=one.getTime()-two.getTime();
13         //System.out.println(time);
14         ExecutorService pool = Executors.newFixedThreadPool(30);
15         for(int j=0;j<15;j++){
16             pool.submit(new Thread(new test()));
17         }
18         pool.shutdown();
19         while(true){
20             if(pool.isTerminated()){
21                 System.out.println(two.getTime()-one.getTime());
22                 break;
23             }
24         }
25     }
26     
27     public void run(){
28         int temp;
29         while((temp=get())<1024){
30             try {    
31                 Socket s=new Socket(InetAddress.getLocalHost(),temp);
32                 System.out.println("服务端口:   "+temp);
33                 s.close();
34             } catch (UnknownHostException e) {
35                 // TODO Auto-generated catch block
36                 e.printStackTrace();
37             } catch(ConnectException e){
38                 System.out.println(temp+"不是服务端口");
39             }catch (IOException e) {
40                 // TODO Auto-generated catch block
41                 e.printStackTrace();
42             }
43             if(temp==1023){
44                 two=new Date();
45             }
46         }
47     }
48 }

尽量多开线程:

public class test {
	public static void main(String argv[]){
		int i;
		Date d=new Date();
		ExecutorService pool = Executors.newFixedThreadPool(1204);
		for(i=1;i<=1024;i++){
			pool.submit(new Thread(new thread(i)));
		}
		pool.shutdown();
		while(true){
			if(pool.isTerminated()){
				Date last=new Date();
				System.out.println(last.getTime()-d.getTime());
				break;
			}
		}
		
	}
}


class thread implements Runnable{
	int i;
	thread(int i){
		this.i=i;
	}
	
	public void run(){
		try {	
			Socket s=new Socket(InetAddress.getLocalHost(),i);
			System.out.println("服务端口:   "+i);
			s.close();
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch(ConnectException e){
			//System.out.println(i+"不是服务端口");
		}catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

  

轮询方法使用了线程同步,但是没有多开线程方法速度快

 

---恢复内容结束---