java网络编程的一些问题

入口类:
[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,大家知道怎么回事吗?
希望能帮忙解答下,小弟感激不尽!!!

2个回答

这快的概念你弄错了。
socket主要是指传输层的协议,包括TCP,UDP或者其它神马;
而telnet是应用层协议,是基于传输层协议的

如果你开通了telnet服务,并且在某个端口上面有个Telnet的server监听,你就可以获得返回。

这是两码事,不能混做一谈。。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐