Java的端口扫描器

问题描述:

import java.net.Socket; 
import java.io.IOException; 

public class Main { 


    public static void main(String[] args) { 
     String remote = "69.163.44.171"; 
     int i = 0; 
     do { 
     try { 
     Socket s = new Socket(remote,i); 
     System.out.println("Server is listening on port " + i+ " of " + remote); 
     s.close(); 

     } catch (IOException ex) { 
     System.out.println("Server is not listening on port " + i+ " of " + remote); 
    } 
     i++; 
     } while(i == 55000); 
} 

输出:Java的端口扫描器

Server is not listening on port 0 of 69.163.44.171 
BUILD SUCCESSFUL (total time: 0 seconds) 

我使用while循环,因为它速度更快,现在的问题是,为什么它只能扫描一个端口?

+0

While循环更快吗? – 2010-03-01 21:03:28

+0

编译器错误:在'while(i == 55000)'后面缺少';'并使用正常的'for'会使代码更易读... – 2010-03-01 21:44:36

+0

(a)这个程序是网络绑定的。如何循环与其表现完全无关。 (b)这是一个'do'循环而不是'while'循环。 (c)比什么更快?为什么? – EJP 2010-03-02 00:31:23

您需要更改这个为你而:

while(i <= 55000) 

目前你达到我(这是1)= 55000,所以你退出循环!

你是说while(i == 55000)代替while(i <= 55000)

这一部分:

} while(i == 55000) 

将重复循环只要i正是 55000.

由于i开始作为0并且在那之后增加到1,它将永远不会以va到达那个位置正好55000,因此永远不会重新启动循环。

好吧......多久一次确实您认为条件while(i == 55000)会是true

在几个答案中已经注意到条件错误,所以我不会重复。我可能会提出一个建议:如果您使用Selector和某些SocketChannels,而不是一次尝试一个,则可能会使速度更快。 Here's一些阅读材料。