运行以下代码检查网络连接时生成了 IOException 异常:

huangapple 未分类评论44阅读模式
英文:

IOException generated when I run the following code for check the internet availability

问题

以下是翻译好的部分:

我开发了一个应用程序,其中我不断地监控互联网连接。当我运行应用程序并且有可用的互联网/ WiFi连接时,不会出现异常。一旦WiFi或互联网断开连接,就会出现问题。

private void detectnetworkloss() {
    Thread timer = new Thread() {
        @Override
        public void run() {
            for (;;) {
                try {
                    Socket socket = null;
                    String host = "www.google.com";
                    int port = 80;
                    int timeOutInMilliSec = 5000;
                    socket = new Socket();
                    socket.connect(new InetSocketAddress(host, port), timeOutInMilliSec);
                    socket.close();
                    wifi.setIcon(new ImageIcon(getClass().getResource("Resources/images/connect1.png")));
                } catch (IOException e) {
                    wifi.setIcon(new ImageIcon(getClass().getResource("Resources/images/disconnect1.png")));
                    e.printStackTrace();
                }
                try {
                    sleep(100);
                } catch (InterruptedException e) {
                    //e.printStackTrace();
                }
            }
        }
    };
    timer.start();
}

以下是异常信息:

java.net.SocketTimeoutException: 连接超时
	at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
	at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
	at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
	at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
	at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
	at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
	at java.net.Socket.connect(Socket.java:589)
	at turbine_stats.Main_Frame$2.run(Main_Frame.java:235)
java.net.NoRouteToHostException: 无法连接到主机:No route to host
	at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
	at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
	at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
	at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
	at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
	at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
	at java.net.Socket.connect(Socket.java:589)
	at turbine_stats.Main_Frame$2.run(Main_Frame.java:235)

请协助我解决这个问题。

谢谢。

英文:

I developed an application in which I check the internet connection monitoring continuously. When I run the application and internet/WiFi is available no Exceptions occur. An issue occurs as soon as WiFi or Internet disconnects.

private void detectnetworkloss() {
    Thread timer=new Thread(){
    @Override
    public void run(){
    for(;;) {
    //InetSocketAddress address= new InetSocketAddress("www.google.com",80); 
            try{
       Socket socket=null;
        String host="www.google.com";
        int port=80;
        int timeOutInMilliSec=5000;
        socket= new Socket();        
        socket.connect(new InetSocketAddress(host, port), timeOutInMilliSec);
        socket.close();
            wifi.setIcon(new ImageIcon(getClass().getResource("Resources/images/connect1.png")));
            }catch(IOException e){
                wifi.setIcon(new ImageIcon(getClass().getResource("Resources/images/disconnect1.png")));
            e.printStackTrace();
            }
        try{
        sleep(100);
        }catch(InterruptedException e){   
        //e.printStackTrace();
        }      
    }  
    }
    };
    timer.start();
}

Exception as follows:

java.net.SocketTimeoutException: connect timed out
	at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
	at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
	at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
	at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
	at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
	at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
	at java.net.Socket.connect(Socket.java:589)
	at turbine_stats.Main_Frame$2.run(Main_Frame.java:235)
java.net.NoRouteToHostException: No route to host: connect
	at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
	at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
	at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
	at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
	at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
	at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
	at java.net.Socket.connect(Socket.java:589)
	at turbine_stats.Main_Frame$2.run(Main_Frame.java:235)

Please assist me in solving it?

Regards

答案1

得分: 0

这就是罐子上写的内容 - 如果没有网络,您会得到“无法路由到主机”异常,我猜这就是您想要的 - 您期望这种情况发生并捕获IOException(SocketTimeoutException是IOException的子类)。虽然我认为您不需要在catch块中调用e.printStackTrace()。捕捉它,检测断开连接,继续进行。

英文:

It is what is says on the tin - you get No route to host exception if there's no internet, which I guess is what you are after - you expect this to happen and catch IOException (SocketTimeoutException is subclass of IOException). Although I don't think you need to call e.printStackTrace() in the catch block. Catch it, detect disconnect, go on.

huangapple
  • 本文由 发表于 2020年3月16日 02:12:46
  • 转载请务必保留本文链接:https://java.coder-hub.com/60696116.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定