2012-05-29 3 views
0

На моем сервере, расположенном на устройстве Android, если число клиентов превышает определенный номер, сервер закрывает сокет. Но в моем клиенте (другое устройство Android) я набираю силу. Как я могу справиться с этим изящно? Вот Соединим часть на моем клиенте:Обработка socket.close() изящно

serverIpAddress = serverIp.getText().toString(); 

    if (!serverIpAddress.equals("")) 
    { 
      try 
      { 
       InetAddress serverAddr = InetAddress.getByName(serverIpAddress); 
       SocketAddress sockaddr = new InetSocketAddress(serverAddr, 5000); 
       nsocket = new Socket(); 
       nsocket.connect(sockaddr);      
      }catch(Exception e){ 
       Log.i("Connect", "Connection Error"); 
      } 

      if (nsocket.isConnected()){ 
        score.setText("Your score is " + sc); 
        serverIp.setVisibility(View.GONE); 
        connectPhones.setVisibility(View.GONE); 
        enterIP.setVisibility(View.GONE); 
        Log.i("Connect", "Socket created, streams assigned"); 
        Log.i("Connect", "Waiting for inital data..." + nsocket.isConnected()); 
        receiveMsg(); 
      } 
+0

Добавьте процедуру закрытия протокола, который вы используете через сокет. Нам сложно помочь вам в этом, так как мы не знаем, что такое ваш протокол. Возможно, сервер может отправить клиенту сообщение «попробуйте еще раз позже», а затем клиент закроет сокет? Таким образом, сервер закрывается только в том случае, если клиент не отвечает и обычно это происходит чисто. –

+0

Также ловить 'Исключение' [обычно считается плохой практикой] (http://stackoverflow.com/questions/4716353/if-catching-null-pointer-exception-is-not-a-good-practice-is-catching -exception) – m0skit0

ответ

0

Keep проверка соединения сокета остается открытым или не используя IsClosed() в бесконечном цикле, когда сервер закрывает соединение, IsClosed() получает истинно, и затем отобразите сообщение или тост, указав желаемую причину пользователю.

0

Похоже, что все, что вы используете для чтения сокета, является блокировкой чтения и генерирует исключение, когда сокет закрывается и застревает при этом чтении. Убедитесь, что чтение находится в блоке try, и используйте catch/finally, чтобы изящно выйти из того, что вы делаете в этот момент.

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