入口类:
[code="java"]package socketone;
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
//开启线程数
int threadCount=5;
//最大端口号
int maxPort=1000;
//最小端口号
int minPort=1;
//端口递增量
int portIncremenr=((maxPort-minPort+1)/threadCount)+((maxPort-minPort+1)%threadCount==0?0:1);
SocketOne[] instances=new SocketOne[threadCount];
//利用多线程将这个端口范围分成不同的段进行扫描
for(int i=0;i<threadCount;i++){
instances[i]=new SocketOne(minPort+portIncremenr*i,minPort+portIncremenr*i+portIncremenr-1);
Thread thread =new Thread(instances[i]);
thread.start();
}
}
}
[/code]
端口扫描类:
[code="java"]package socketone;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
public class SocketOne implements Runnable{
//最小端口号
private int minPort;
//最大端口号
private int maxPort;
public SocketOne(int minPort, int maxPort) {
super();
this.minPort = minPort;
this.maxPort = maxPort;
}
@Override
public void run() {
for(int i=minPort;i<=maxPort;i++){
try {
Socket socket=new Socket("127.0.0.1", i);
if(socket.isConnected()){
System.out.println("端口号:"+i+" 打开!");
}
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
[/code]
就是很简单的一个本机端口扫描,利用多线程分配扫描端口范围,但是却一直提示以下异常:
[code="java"]java.net.ConnectException: Connection refused: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(Unknown Source)
at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.(Unknown Source)
at java.net.Socket.(Unknown Source)
at socketone.SocketOne.run(SocketOne.java:23)
at java.lang.Thread.run(Unknown Source)
[/code]
连接被拒绝,很是疑惑,连接本机都拒绝,但是在cmd下,我用telnet是可以连接的,系统是win7,大家知道怎么回事吗?
希望能帮忙解答下,小弟感激不尽!!!