Java套接字连接中未报告的异常

Java unreported exception in socket connection

我正在学习 java,我遇到了一个我不明白的奇怪错误,下面是我的代码:

import java.net.Socket;
import java.io.IOException;
class Client{
    public static void main(String[]args){
        System.out.println("Connecting...");
        Socket request=new Socket("127.0.0.1", 1234);
        System.out.println("Connected.");
        request.close();
    }
}

我收到的错误:

test.java:6: error: unreported exception UnknownHostException; must be caught or declared to be thrown
        Socket request=new Socket("127.0.0.1", 1234);
                   ^
1 error

我正在使用 javac test.java 编译,如果有帮助,有人知道如何纠正这个错误吗?

来自文档 public Socket(String host, int port) throws UnknownHostException, IOException throws

UnknownHostException - if the IP address of the host could not be determined.

确保传递正确的 IP 地址

有两种方法可以实现它,要么在 main 方法后面写 throws UnknownHostException,要么用 try-catch 包围它。但是编写 IOException 而不是 UnknownHostException 会更聪明,因为无论如何你都需要稍后实现它,并且因为 UnknownHostException 扩展了 IOException 你可以只写 throws IOException

方法一:

public static void main(String[]args) throws IOException{
    System.out.println("Connecting...");
    Socket request=new Socket("127.0.0.1", 1234);
    System.out.println("Connected.");
    request.close();
}

方法二:

public static void main(String[]args){
    System.out.println("Connecting...");
    try {
        Socket request=new Socket("127.0.0.1", 1234);
        System.out.println("Connected.");
        request.close();
    } catch (IOException e){
        e.printStackTrace();
    }
}

希望这对您有所帮助。 :)

使用 try-with-resources 让您不必担心在出现问题时关闭东西。如果有异常,则捕获异常,然后自动关闭套接字。

import java.net.Socket;
import java.io.IOException;
class Client{
    public static void main(String[]args){
        System.out.println("Connecting...");
        try (Socket request=new Socket("127.0.0.1", 1234)){
            System.out.println("Connected.");
        } catch (IOException e) {
            System.out.println("Host error:" + e)
        }
    }
}