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循环,因为它速度更快,现在的问题是,为什么它只能扫描一个端口?
答
您需要更改这个为你而:
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一些阅读材料。
While循环更快吗? – 2010-03-01 21:03:28
编译器错误:在'while(i == 55000)'后面缺少';'并使用正常的'for'会使代码更易读... – 2010-03-01 21:44:36
(a)这个程序是网络绑定的。如何循环与其表现完全无关。 (b)这是一个'do'循环而不是'while'循环。 (c)比什么更快?为什么? – EJP 2010-03-02 00:31:23