尝试使用Socket测试localhost端口上的连接并获取ConnectException

时间:2014-04-22 08:54:54

标签: java sockets

我正在编写一个简单的测试Java程序,使用Socket测试本地计算机上哪个端口可用于TCP服务。这是我的代码:

for (int i = 0; i < 1024; i++) {
    try {
        //test availability
        InetAddress addr = InetAddress.getLocalHost();
        Socket s = new Socket(addr, i);
        System.out.println("There is a server on port " + i + "of localhost.");
    } catch (IOException e){
        e.printStackTrace();
        break;
    }
}

跑步的时候我得到了:

java.net.ConnectException: connect: Address is invalid on local machine, or port is not valid on remote machine
        at java.net.DualStackPlainSocketImpl.connect0(Native Method)
        at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
        at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
        at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
        at java.net.AbstractPlainSocketImpl.connect(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.<init>(Unknown Source)
        at java.net.Socket.<init>(Unknown Source)
        at main.PortScanner.main(PortScanner.java:19)

我是Socket的新手。我是否需要启动一个Socket服务器来响应我的任务? 或者我应该如何扫描我的端口呢? 谢谢你的回答。

2 个答案:

答案 0 :(得分:1)

您正在尝试建立到端口0的客户端连接,这是不可能的。如果要将服务器端套接字绑定到端口0,系统将自动分配1024以上的空闲端口。 因此,服务器套接字永远不会侦听端口0。 不幸的是我找不到关于此的文档。可能是其他操作系统的行为方式不同。

您的第二个问题:如果没有任何内容正在监听端口,那么您将获得连接异常。

答案 1 :(得分:0)

您是以root用户身份还是以管理员身份运行此程序?如果没有,只有这些用户可以打开一个端口在0到1024之间的套接字。