2017-08-04 167 views
0

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

 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); 
    } 
     } 

不过,我在我们的例子中得到以下异常,同时呼吁发送有关数据报套接字:

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

Imo _network unreachable_与UDP或TCP无关,因为它发生在OSI模型的第3层。根本没有路由到请求的IP地址。 – Matt

+0

这将有助于知道你运行这台机器的IP地址是什么。 – RealSkeptic

+0

第一步 - 你能ping通地址吗? –

回答

1

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