我构建了一个具有服务的应用程序,它包含用于在LAN中接收消息的套接字。当WiFi打开时工作正常,但是当我启动WiFi OFF状态的应用程序时,它会出现套接字绑定失败的错误即使我打开WiFi也无法工作。
当打开WiFi时,有没有办法在应用程序中收到通知,以便我可以再次启动该特定服务,或任何其他方法来绑定套接字,以便它可以正确绑定WiFi OFF状态。 我目前的代码是:
socket = new DatagramSocket(port, broadcastIP);
DatagramPacket packet = new DatagramPacket(recvBuf, recvBuf.length);
socket.receive(packet);
答案 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