我正在使用以下代码将DatagramPacket
发送到指定地址:
InetAddress address = InetAddress.getByName(anIPAddress);
DatagramSocket socket = new DatagramSocket();
DatagramPacket packet = new DatagramPacket(packetBytes, packetBytes.length,
address, port);
socket.send(packet);
socket.close();
它工作正常,但是当没有可用的互联网连接时,为什么这段代码不会抛出任何Exception
?
我关闭了Wi-Fi和移动数据,此代码仍然可以执行而没有任何错误。
有没有办法确保实际发送数据包?
(我不在乎它是否到达目的地,我只是想确保它被发送)
答案 0 :(得分:1)
您可以使用NetworkInterface.getNetworkInterfaces();
检查可用的接口。
然后,您可以查看ni.isUp()
。
Enumeration<NetworkInterface> nets=NetworkInterface.getNetworkInterfaces();
for(int i=0; nets.hasMoreElements(); ++i) {
NetworkInterface ni=nets.nextElement();
if (ni.isUp() && !ni.getName().equals("lo")) {
//ni is not local
break;
}
}
答案 1 :(得分:0)
将数据报套接字连接到目标。然后在几次发送后你可能会得到一个例外。如果数据报套接字未连接,则会出现错误路由问题,我无法记得:当我有机会查找时,我会编辑它。
是的,我知道UDP是一种无连接协议。但您仍然可以连接UDP套接字。