照着书上打的也出错
晕死
大家帮忙看看,哪里出错/**
 * 
 */
package les2;import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;/**
 * 判断1到1024端口是否有服务器程序监听
 * 
 * @author Administrator
 * 
 */
public class PortScanner
{ /**
 * @param args
 *            可以传入一个主机名
 */
public static void main(String[] args)
{
// TODO Auto-generated method stub String host = "localhost"; if (args.length != 0)
{
host = args[0];
} PortScanner ps = new PortScanner(); ps.scan(host);
} /**
 * 扫描端口
 * 
 * @param host
 *            主机
 */
public void scan(String host)
{
Socket socket = null;
int port = 0; for (int i = 8000; i <= 8080; i++)
{
port = i; try
{
socket = new Socket(host, port); System.out.println("端口 :" + port + " 有服务器监听!");
} catch (UnknownHostException e)
{
// TODO Auto-generated catch block System.out.println("没有找到主机:" + host);
e.printStackTrace();
} catch (IOException e)
{
// TODO Auto-generated catch block System.out.println("出错啦!");
e.printStackTrace();
} finally
{
if (socket != null)
{
try
{
socket.close();
} catch (IOException e)
{
// TODO Auto-generated catch block System.out.println("出错啦!");
e.printStackTrace();
}
}
}
}
}
}
错误信息
出错啦!
java.net.ConnectException: Connection refused: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:529)
at java.net.Socket.connect(Socket.java:478)
at java.net.Socket.<init>(Socket.java:375)
at java.net.Socket.<init>(Socket.java:189)
at les2.PortScanner.scan(PortScanner.java:56)
at les2.PortScanner.main(PortScanner.java:36)

解决方案 »

  1.   

    你的socket监听的端口给占用了,你试一下在dos下查看你的端口有没有被占用
    “运行”--》“cmd”--》“netstat an”
      

  2.   

    噢噢,命令有些问题,应该是netstat -an
      

  3.   

    我刚才在你的代码的基础上做了下修改.运行没问题.这里我也有点不明白;程序上看,好像用ServerSocket创建socket的时候会如果端口已被使用,则会报一个BindException异常但是如果用Socket的话就不会了.如果你需要更详细的了解两者的区别,建议你查j2se的api,那样对你帮助更大
    package com.test;
    import java.io.IOException;
    import java.net.BindException;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.net.UnknownHostException;public class PortScanner
    {    public static void main(String[] args)
        {
            //String host = "localhost";
            PortScanner ps = new PortScanner();
            ps.scan("localhost");
        }  
        public void scan(String host)
        {
            ServerSocket socket = null;
            int port = 0;
            for(int i = 0 ; i<8080; i ++) {
                try {
                    socket = new ServerSocket(5037);
                } catch (UnknownHostException e) {               
                    System.out.println("没有找到主机:" + host);
                    e.printStackTrace();
                } catch (BindException e) {
                 System.out.println("端口 :" + i + " 有服务器监听!");
         } catch (IOException e) {
                    // TODO Auto-generated catch block                e.printStackTrace();
                } finally {
                    if (socket != null) {
                        try {
                            socket.close();
                        } catch (IOException e) {
                            System.out.println("出错啦!");
                            e.printStackTrace();
                        }
                    }
                }
         }
        }
    }
      

  4.   

    不好意思;
    上面代码中的一处错误,
    将socket = new ServerSocket(5037);
    改为socket = new ServerSocket(i);