没有互联网连接时如何发送DatagramPacket - Android

7
我正在使用以下代码将 DatagramPacket 发送到指定地址:

InetAddress address = InetAddress.getByName(anIPAddress);

DatagramSocket socket = new DatagramSocket();
DatagramPacket packet = new DatagramPacket(packetBytes, packetBytes.length,
    address, port);

socket.send(packet);
socket.close();

它运行良好,但是当没有互联网连接可用时,为什么这段代码不会抛出任何异常呢?

我关闭了Wi-Fi和移动数据,但是该代码仍然在没有发生任何错误的情况下被执行。

是否有一种方法可以确保数据包实际上已被发送?

(我不关心它是否到达目的地,我只想确保它已发送)


1
数据报包可以通过本地主机发送。因此,发送数据报包不需要互联网连接。 - SedJ601
看这个。http://www.java2s.com/Code/Java/Network-Protocol/UseDatagramSockettosendoutandreceiveDatagramPacket.htm - SedJ601
创建两个Java程序。一个是聊天客户端,另一个是聊天服务器,并观察它们之间的通信。 - SedJ601
2个回答

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

0

将数据报套接字连接到目标。然后发送几次后,您可能会收到异常。如果数据报套接字未连接,则存在错误路由问题,我无法立即记起:我会在有机会查找时进行编辑。

是的,我知道UDP是一种无连接协议。但是您仍然可以连接UDP套接字。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接