发送没有互联网连接的DatagramPacket - Android

时间:2016-09-20 12:35:17

标签: java android udp

我正在使用以下代码将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和移动数据,此代码仍然可以执行而没有任何错误。

有没有办法确保实际发送数据包?

(我不在乎它是否到达目的地,我只是想确保它被发送)

2 个答案:

答案 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套接字。