Пинг-сервер периодически возвращается в автономный режим java Minecraft

#java #minecraft

Вопрос:

Итак, я пытаюсь перебрать ip-адреса в списке массивов, чтобы я мог пропинговать их и получить данные, однако время от времени я получаю ошибку автономного сервера, даже когда сервер подключен, когда я пропингую его отдельно. Я использую многопоточную среду. Также не может быть, чтобы сервер отвечал слишком долго, потому что я увеличил время ожидания, и раздельная отправка 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  

Комментарии:

1. Вы ничего не можете здесь сделать. Это проблема вне вашего кода (при условии, что адрес указан правильно). Лучше всего установить тайм-аут и поймать ошибку, возможно, попробовать еще раз, а затем пропустить этот сервер.

2. Примечание: Всегда ли это одни и те же серверы? Если вы звоните слишком часто, вы можете попасть в черный список (временно/постоянно). Попробуйте распределить свои соединения или использовать меньшее количество потоков и посмотрите, поможет ли это.

Ответ №1:

Когда сервер отключен, и вы знаете, что это не ваш сбой (т. Е. Ошибка кода/неправильный 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, что и вы, он создавал «Исключение соединения». Ваш API, похоже, зависит от «исключения SocketTimeoutException«. Итак, я добавляю еще одну область обработки.