WiFi关闭时套接字绑定失败

时间:2013-11-18 07:39:41

标签: java android sockets service network-programming

我构建了一个具有服务的应用程序,它包含用于在LAN中接收消息的套接字。当WiFi打开时工作正常,但是当我启动WiFi OFF状态的应用程序时,它会出现套接字绑定失败的错误即使我打开WiFi也无法工作。

当打开WiFi时,有没有办法在应用程序中收到通知,以便我可以再次启动该特定服务,或任何其他方法来绑定套接字,以便它可以正确绑定WiFi OFF状态。 我目前的代码是:

socket = new DatagramSocket(port, broadcastIP);

        DatagramPacket packet = new DatagramPacket(recvBuf, recvBuf.length);

        socket.receive(packet);

1 个答案:

答案 0 :(得分:1)

如果WiFi为OFF,则在创建DatagramSocket实例时可能会收到SocketException,因为套接字无法绑定到传递的IP地址。此外,如果网络接口关闭,则它没有任何IP地址。

也许您应首先询问设备中的网络接口,然后检查每个接口的状态。如果接口已启动,则获取IP地址,然后您可以创建绑定到它的套接字。

Enumeration<NetworkInterface> nets = NetworkInterface.getNetworkInterfaces();

for (NetworkInterface netIf : Collections.list(nets))
{
    System.out.println("Display name: " + netIf.getDisplayName());
    System.out.println("Name: " + netIf.getName());

    if (netIf.isUp()) //Is the interface up
    {
        Enumeration<InetAddress> inetAddresses = netIf.getInetAddresses();

        for (InetAddress inetAddress : Collections.list(inetAddresses))
        {
            System.out.println("InetAddress: " + inetAddress);
        }
    }
}

看这里: http://docs.oracle.com/javase/tutorial/networking/nifs/retrieving.html 和这里: http://docs.oracle.com/javase/6/docs/api/java/net/NetworkInterface.html