2013-06-19 3 views
0

Как проверить, находится ли сервер в сети или в автономном режиме, и если отключено подключение к Интернету до тех пор, пока сервер не будет включен. Я пытался с этим:Обнаружение, если соединение не удалось - Java Android

 connectBtn.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      new Thread(rConnection).start(); 

     } 
    }); 

    public Runnable rConnection = new Runnable() { 

    @Override 
    public void run() { 
     boolean status = connect();   
     while (!status) 
     { 
      System.out.println("Connection Status: " + status); 
      status = Connect(); 
     } 
    } 
}; 

public boolean Connect() { 

     boolean status = false; 

     try { 
      s = new Socket(SERVER_ADDRESS, TCP_SERVER_PORT); 

      System.out.println("Socket: " + s.toString()); 

      if (s.toString() != "") 
      { 
       status = true; 
      } 
     } catch (UnknownHostException e) { 
      e.printStackTrace(); 
      status = false; 
      s=null; 
     } catch (IOException e) { 
      e.printStackTrace(); 
      status = false; 
      s=null; 
     } catch (NullPointerException e) 
     { 
      e.printStackTrace(); 
      status = false; 
      s=null; 
     } 

     return status; 
    } 

Если сервер работает, прежде чем смотреть приложение он подключается успешно, но если сервер выключен или отключается через некоторое время я не получаю сообщение об ошибке, и он не будет снова начать повторное подключение. Как это решить?

+1

Почему 'Socket.toString()' никогда не будет пустым 'String?' – EJP

ответ

1

В принципе, вы можете разделить это:

s = new Socket(SERVER_ADDRESS, TCP_SERVER_PORT); 

в

s = new Socket(); 
s.connect(remoteAddr,timeout) 

А потом контролировать, если подключить возвращается на тайм-аут или преуспевающим соединения.

+0

InetSocketAddress socketAddress = новый InetSocketAddress (SERVER_ADDRESS, TCP_SERVER_PORT); \t \t \t \t s.connect (socketAddress, 2000); Теперь я получаю исключение Null Pointer Exception, даже началось приложение для сервера и прослушивание? Ты знаешь почему? – Josef

+1

's'is определено (не пусто)? Любая трассировка стека? – PeterMmm

+1

Этот код не будет вызывать 'NullPointerException', если' s' не равно null. Единственное объяснение состоит в том, что вы оставили часть '= new Socket()' части кода. – EJP

0

Посмотрите эту нить для решения и ключевые слова: How can I monitor the network connection status in Android?. Кроме того, подумайте о повторном запросе нового соединения, если базовое соединение потеряно (или отключено).

+0

Это не то, что я хочу, потому что серверное приложение работает на определенном порту и IP-адресе. – Josef

+0

Попробуйте применить [this] (http://tldp.org/HOWTO/TCP-Keepalive-HOWTO/overview.html), используя [this] (http://developer.android.com/reference/java/net/SocketOptions. HTML # SO_KEEPALIVE). Это приведет к немногому сетевому трафику, но вы сможете немедленно перезапустить соединение (если у вас есть возможность подключения). –

0

Как проверить, если сервер находится в оперативном или автономном режиме, а если автономный запуск соединяющего пока сервер не находится на

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

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