2015-01-27 6 views
0

У меня проблема.java timeout thread для подключения к неправильному серверу

Я хочу подключиться к Игровому серверу с IP-адресом, который вводит пользователь. До тех пор, пока сервер является правильным или сервер не существует, все в порядке, у меня есть соединение или исключение.

Проблема в том, что если я ввел IP-адрес существующего сервера, который не запускает мою игру. В этом случае программа остается в событии соединения и не реагирует ни на что. Я думал о создании таймера-нитки, хотя это не сработало. Программа не реагирует на какие-либо входные данные пользователя и только позволяет закрыть ее.

Я реализовал клиент как нить и таймер как нить. Timer-Thread должен остановить клиент-нить, если она не работает.

Мой Таймер:

public class Timer extends Thread{ 
    private int counter; 
    private Coplayer client; 

    Timer(int i, Coplayer c){ 
     if (i>=0) { 
      counter = i; 
     } else { 
      counter = -i; 
     } 
     client = c; 
    } 

    @Override 
    public void run(){ 
     if (counter>0) { 
      counter -= 1; 
     } else { 
      client.stop(); 
     } 
    } 

и мой клиент:

try { 
      Timer t1 = new Timer(100, this); 
      client=Network.connectToServer(ip,port);//this is the line the programm halts 
      t1.stop(); 
      client.start(); 

       connected = true; 
       Serializer.registerClass(Message_String.class); 
       Serializer.registerClass(Message_Player.class); 
       CL = new ClientListener(); 
       client.addMessageListener(CL, Message_String.class); 
       client.addMessageListener(CL, Message_Player.class); 
       return "Verbunden."; 

     } catch (java.net.ConnectException e){ 
      connected = false; 
      return "Verbindung konnte nicht hergestellt werden."; 
     } catch (java.net.UnknownHostException e){ 
      connected = false; 
      return "Server nicht bekannt."; 
     } catch (IOException ex) { 
      connected = false; 
      return "Falsche Eingabe."; 
     } 

Я использую JAVA с Jmonkey, если это имеет значение.

+0

Где метод Network.connectToServer определен? Такие методы должны иметь аргумент тайм-аута. – lbalazscs

+0

Это метод от spidermonkey. Я не нашел никакой информации, если у нее есть таймаут, но он вызывает исключения, которые я ловил. Но на неправильном сервере нет никаких исключений, но нет связи. Я могу указать игру, сервер должен работать, но это не помогает, но ничего не работает. – iova

+0

для получения дополнительной информации см. В моем поиске и устранении неисправностей на http://hub.jmonkeyengine.org/t/check-server-game-id/31342/3 , но там мы также не нашли решения, поэтому я - спрашиваю вас. – iova

ответ

1

Вопрос тайм-аут уже обсуждался: http://hub.jmonkeyengine.org/t/set-timeout-for-network-connecttoserver/30836

Я все еще думаю, что разработчики jmonkeyengine должны создать версию Network.connectToServer, которая имеет параметр тайм-аута. Это не должно быть сложно, потому что java.net.Socket имеет поддержку тайм-аута. (Может быть, вы могли бы спросить их)

Во всяком случае, как workararound вы всегда можете начать попытку соединения на отдельном потоке, как описано здесь: How to timeout a thread

+0

Согласен, +1. Они, кажется, находятся в полном отрицании или невежестве. – EJP

 Смежные вопросы

  • Нет связанных вопросов^_^