java - 尝试使用 Socket 测试本地主机端口上的连接并获取 ConnectException

标签 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 服务器来响应我的任务? 或者我应该做什么来扫描我的端口? 感谢您的回答。

最佳答案

您正在尝试建立到端口 0 的客户端连接,但这是不可能的。如果将服务器端套接字绑定(bind)到端口 0,系统将自动分配一个高于 1024 的空闲端口。 因此服务器套接字永远不会监听端口 0。 不幸的是我找不到关于此的文档。其他操作系统的行为可能有所不同。

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

关于java - 尝试使用 Socket 测试本地主机端口上的连接并获取 ConnectException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23214860/

相关文章:

java - Java 生产者消费者多线程中的终止

java - 双重计算产生奇数结果

Java异常帮助

sockets - Haskell套接字操作调用语法

Java - 如何循环读取InputStream,直到用户输入继续?

java - Hamcrest allOf() 的签名是错误的吗?

java - 如何仅在 JTable 中的特定单元格中设置 JComboBox

c# - ReceiveAsync 与 BeginReceive 的性能

c - Socket UDP 客户端内存泄漏

sockets - 网络主机上的套接字