【问题标题】:why is "78.137.18" not rejected as an invalid IP address?为什么“78.137.18”没有被拒绝为无效的IP地址?
【发布时间】:2026-01-18 16:10:01
【问题描述】:

当我的 android 程序中发生异常时,我正在尝试在套接字的异常块中打印一些东西。

但是,即使我提供了无效的 IP 地址,我的异常也不会被调用。

      try{
      SocketAddress socketAddress = new InetSocketAddress("78.137.18" , 8364);
      } 
      catch (Exception e)
      {
        System.out.println("ERROR");
      }

【问题讨论】:

    标签: android sockets exception exception-handling


    【解决方案1】:

    这实际上是一个有效的 IP 地址。

    mslade@mickpc:~$ perl -nle 'use Socket; print inet_ntoa(inet_aton($_))'
    78.137.18 
    78.137.0.18
    

    InetSocketAddress 的构造函数也将接受主机名。

    如果您想明确拒绝这些地址(但您确定吗?),那么您将不得不编写代码来检查地址字符串,可能使用正则表达式。

    【讨论】:

    • 我正在尝试连接到我确定已关闭的 IP 地址。不过,没有调用异常。你有什么想法吗?
    【解决方案2】:

    InetSocketAddress 创建一个代表套接字地址的对象。它确实将主机名解析为 IP 地址,但它不连接也不绑定到指定的地址。这就是为什么你没有得到异常。该地址在语法上是正确的,并且从未进行过连接尝试,因此没有理由抛出异常。

    【讨论】:

    • 我尝试连接,但仍然没有收到异常。但现在,我通过 timeoutException 解决了这个问题。