簡體   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