【发布时间】:2021-11-08 04:05:10
【问题描述】:
所以,我尝试遍历 arraylist 中的 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
【问题讨论】:
-
这里无能为力。这是您的代码之外的问题(假设地址是正确的)。最好的办法是设置超时并捕获错误,也许再试一次,然后跳过该服务器。
-
注意:总是相同的服务器吗?如果您过于频繁地 ping,那么您可能会被列入黑名单(暂时/永久)。尝试间隔连接,或使用更少的线程,看看是否有帮助。