Java 如何通过某个界面检查互联网是否正常?

Java 如何通过某个界面检查互联网是否正常?,java,internet-explorer,network-interface,Java,Internet Explorer,Network Interface,我的电脑连接到两个不同的接口,可以访问互联网(有线连接和wifi连接到具有移动访问功能的智能手机,以防有线连接丢失) 当有线连接具有internet连接时,我会在DOS提示下手动断开另一个(移动)连接: netsh wlan disconnect interface="Wi-Fi" 现在,我将每隔一分钟左右检查一下我是否可以通过有线互联网连接到任何网站 一旦出现故障,java将再次连接到Wi-Fi连接,以便将互联网连接的丢失降至最低: 但我的问题来了:一旦有线互联网重新启动并运行,我希望jav

我的电脑连接到两个不同的接口,可以访问互联网(有线连接和wifi连接到具有移动访问功能的智能手机,以防有线连接丢失)

当有线连接具有internet连接时,我会在DOS提示下手动断开另一个(移动)连接:

netsh wlan disconnect interface="Wi-Fi"
现在,我将每隔一分钟左右检查一下我是否可以通过有线互联网连接到任何网站

一旦出现故障,java将再次连接到Wi-Fi连接,以便将互联网连接的丢失降至最低:

但我的问题来了:一旦有线互联网重新启动并运行,我希望java能够再次通过该接口地址自动连接,并断开“Wi-Fi”(以限制成本…)


我不知道是否可以连接到以预定义IP地址开头的URL,以确定有线连接何时再次联机。

最后我自己找到了一个解决方案,如以下代码所示(此代码作为测试运行,在具有有线和wifi连接的桌面上启动,自动关闭移动连接,然后手动断开有线连接,自动再次打开移动连接。一旦手动重新连接有线连接,移动连接将断开(她又哭了)

包测试包;
导入java.net.InetAddress;
导入java.net.InetSocketAddress;
导入java.net.NetworkInterface;
导入java.net.Socket;
导入java.util.Enumeration;
公共类测试互联网{
公共静态void main(字符串[]args){
int互联网=1;
int计数器=0;

而(counter最终我自己找到了一个解决方案,如下面的代码所示(此代码作为测试运行,在具有有线和wifi连接的桌面上启动,自动关闭移动连接,然后手动断开有线连接,自动再次打开移动连接。一旦手动重新连接有线连接,移动连接将断开(她又哭了)

包测试包;
导入java.net.InetAddress;
导入java.net.InetSocketAddress;
导入java.net.NetworkInterface;
导入java.net.Socket;
导入java.util.Enumeration;
公共类测试互联网{
公共静态void main(字符串[]args){
int互联网=1;
int计数器=0;

虽然(反驳)虽然这个解决方案适合我,但它并不完全是我想要的:这段代码只适用于移动WIFI连接。我真正想要的是一个到PC的移动USB连接,这对我来说似乎更可靠。但直到现在我还找不到java如何自动断开这种连接。如果有人知道answ呃,请把它贴在这里作为一个便条!虽然这个解决方案对我有效,但它并不完全是我想要的:这个代码只适用于移动WIFI连接。我真正想要的是一个到PC的移动USB连接,这对我来说似乎更可靠。但直到现在我还不知道java如何自动断开这种连接.如果有人知道答案,请把它作为便条贴在这里!
package testingPackage;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.NetworkInterface;
import java.net.Socket;
import java.util.Enumeration;
public class TestInternet {
public static void main(String[] args) {
int internet = 1;
int counter = 0;
while(counter<10){
    counter = counter + 1;
    int connections = 0;
    Socket[] soc = new Socket[10];
    try{
        NetworkInterface nif = NetworkInterface.getByName("eth1");
        //the right name of the wired internet can be found with following code in between  /* … */
        /*
        Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
            while (interfaces.hasMoreElements()) {
            NetworkInterface interf = interfaces.nextElement();
            if (interf.isUp() && !interf.isLoopback()) {
                List<InterfaceAddress> adrs = interf.getInterfaceAddresses();
                for (Iterator<InterfaceAddress> iter = adrs.iterator(); iter.hasNext();) {
                    InterfaceAddress adr = iter.next();
                    InetAddress inadr = adr.getAddress();
                    if (inadr instanceof Inet4Address){
                        NetworkInterface nif1 = NetworkInterface.getByInetAddress(inadr);
                        System.out.println("L30 = "+nif1);
                    } 
                }
            }
        } 
        */
        Enumeration<InetAddress> nifAddresses = nif.getInetAddresses();
        while (nifAddresses.hasMoreElements()){
            soc[connections] = new java.net.Socket();
            soc[connections].bind(new InetSocketAddress(nifAddresses.nextElement(), 0));
            connections = connections + 1;
        }
        soc[0].connect(new InetSocketAddress("www.google.com", 80));
        if(internet==0){
            System.out.println("Internet is BACK, throw out the mobile internet now !");
            try{
                Runtime.getRuntime().exec(new String[]{"netsh", "wlan", "disconnect", "interface=Wi-Fi"});
                internet = 1;
            }
            catch (Exception e2) {System.out.println("Warning : Could not disconnect the mobile network !");  }
        }
        else{
            System.out.println("Internet is UP");
        }
    }
    catch (Exception e) {
        System.out.println("enumeration failed");connections  = 0;
        System.out.println("Internet is still DOWN, connect to mobile internet now !");
        connections  = 0;
        internet = 0;
        //find SSID name, profile name and interface name of the wired and wireless network in DOS :
            //netsh wlan show networks : returns the SSID name XXXX
            //netsh wlan show profile (REQUIRED): returns the profile name YYYY
            //netsh wlan show interfaces : returns the interface name
        try{
            Runtime.getRuntime().exec(new String[]{"netsh", "wlan", "connect","ssid=XXXX", "name=YYYY", "interface=Wi-Fi"});
        }
        catch (Exception e2) {System.out.println("Warning : no internet ! Could not connect to mobile network !");  }
    }
    System.out.println("number of wired connections = "+connections);
    try {Thread.sleep(10000);} 
    catch (InterruptedException e) {System.out.println("no sleep"); }
}