2017-08-04 210 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消息並將其發送回主機。