繁体   English   中英

Ping 服务器偶尔返回离线 java Minecraft

[英]Pinging server returns offline occasionally java Minecraft

因此,我尝试遍历数组列表中的 ipaddresses,以便我可以 ping 它们并获取数据,但是,即使我单独 ping 服务器在线时,偶尔也会出现脱机服务器错误。 我使用多线程环境。 也不能是服务器花费太长时间来回复,因为我增加了超时长度并且单独 ping ip 没有问题。 任何帮助表示赞赏


public class PingServer implements Runnable {
    private String serverip;
    public PingServer(String ip) {
        this.serverip = ip;
    }
    public void run() {

        try {
            MinecraftPingReply data = new MinecraftPing().getPing(new MinecraftPingOptions().setHostname(serverip).setPort(25565));
            //sending
            String servercount = data.getPlayers().getOnline() + "/" + data.getPlayers().getMax();


          System.out.println(serverip + " " + servercount + " pineapple");



        } catch (IOException |  IllegalStateException | IllegalArgumentException | JsonSyntaxException exception){
            System.out.println("offline" + serverip + “ ” + exception);
        }


    }
}



java.net.SocketTimeoutException: Connect timed out
    at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:546)
    at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597)
    at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:333)
    at java.base/java.net.Socket.connect(Socket.java:645)
    at com.corporate.utils.mcping.MinecraftPing.getPing(MinecraftPing.java:66)
    at com.corporate.database.refresh.ReplaceDataDB.run(ReplaceDataDB.java:36)
    at java.base/java.lang.Thread.run(Thread.java:831)
Exception in thread "Thread-16145" java.lang.NullPointerException

当服务器离线时,您知道这不是您的失败(即代码错误/错误的 IP...),您可以忽略它。

我建议你做这样的事情,来管理谁处理了哪些错误:

try {
    // here you code
    online = true;
} catch (UnsupportedOperationException e) {
    e.printStackTrace(); // here it's your code that create error
} catch (ConnectException | SocketTimeoutException e) {
    // server offline
    online = false;
} catch (Exception e) { // all others issues
    getLogger().severe("Server " + key + " create an error:");
    e.printStackTrace();
}

在我的情况下,例如我不使用与您相同的 API,它生成了“ ConnectException ”。 您的 API 似乎依赖于“ SocketTimeoutException ”。 所以,我添加了另一个处理程序区域。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM