IOException网络无法访问

时间:2017-08-04 10:07:25

标签: java sockets networking udp

我们使用UDP套接字进行通信。在此代码中,应用程序正在将数据包发送到给定服务器(由给定的主机名和端口标识)。此代码是从大型代码库中提取的。

        class Test {
            private static int UDP_PORT_NUMBER=15000;

    public static void main(String args[]) {
        String host = “192.168.2.10”;
        byte[] bytes = {(byte)0xd1, 0x35, (byte)0x39, (byte)0xea, (byte)0xa2, (byte)0xd8};
        DatagramSocket datagramSocket = new DatagramSocket();
                final InetAddress inetAddress = InetAddress.getByName(host);
                final DatagramPacket sendPacket = new DatagramPacket(bytes, bytes.length,
                        inetAddress, UDP_PORT_NUMBER);
                datagramSocket.send(sendPacket);
    }
      }

但是,在我们的情况下,我在调用数据报套接字上的send时遇到异常:

java.io.IOException: Network is unreachable
        at java.net.PlainDatagramSocketImpl.send(Native Method) ~[?:1.8.0_91]
        at java.net.DatagramSocket.send(DatagramSocket.java:693) ~[?:1.8.0_91]

UDP中网络不可达的含义是什么?如何检测UDP是无连接的?在UDP套接字中我可以获得网络不可达IOException的情况是什么?

1 个答案:

答案 0 :(得分:3)

网络不可达消息是ICMP消息。当主机尝试访问其他网络上的其他主机时,它会将第3层数据包发送到其配置的网关。如果网关(或路径中的任何路由器)不知道如何到达其他网络,它将生成ICMP消息并将其发送回主机。