我们使用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的情况是什么?
答案 0 :(得分:3)
网络不可达消息是ICMP消息。当主机尝试访问其他网络上的其他主机时,它会将第3层数据包发送到其配置的网关。如果网关(或路径中的任何路由器)不知道如何到达其他网络,它将生成ICMP消息并将其发送回主机。