2013-12-13 5 views
0

Я создаю приложение с несколькими клиентами/сервером, когда любой клиент отключается от моего сервера, который он просто висит. как я могу установить любое условие, которое сообщит мне напечатать какое-то сообщение, когда любого клиент отключается от сервера вот мой кодСервер зависает, когда клиент отключается

class ServerThread implements Runnable { 

    public void run() { 
     Socket socket = null; 
     try { 
      System.out.println("server starting......."); 
      serverSocket = new ServerSocket(SERVERPORT); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     while (!Thread.currentThread().isInterrupted()) { 

      try { 
       System.out.println("Ready to accept......."); 
       socket = serverSocket.accept(); 

       System.out.println(" client Connected with ip address =" +socket.getRemoteSocketAddress().toString()); 

       CommunicationThread commThread = new CommunicationThread(socket); 
       new Thread(commThread).start(); 

      } catch (IOException e) { 
       e.printStackTrace(); 
       System.out.println("catch block"); 

      } 

     } 
    } 
} 

class CommunicationThread implements Runnable { 

    private Socket clientSocket; 

    private BufferedReader input; 

    public CommunicationThread(Socket clientSocket) { 

     this.clientSocket = clientSocket; 

     try { 

      this.input = new BufferedReader(new InputStreamReader(this.clientSocket.getInputStream())); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    public void run() { 


     while (!Thread.currentThread().isInterrupted()) { 

      try { 

       String read = input.readLine(); 

       updateConversationHandler.post(new updateUIThread(read)); 

      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

} 

сервера любой помощи будет оценен

+0

Висит, как? Он перестает принимать какие-либо новые подключения или просто связывается с CommunicationThread? –

+0

У меня есть текстовое представление, на которое я устанавливаю все сообщения, полученные от клиентов. но всякий раз, когда какой-либо клиент diconnectes textview показывает, клиент говорит: null, и это продолжается в цикле, и, наконец, мое приложение отключается – Mohit

+0

Да, просто слушайте на каком-то порту, чтобы получить строку. Если вы что-то получаете, остановите сервер :) –

ответ

0

Это не ясно, будет ли означать, что вы отключится, потому что разговор закончился (т. е. все завершено успешно) или отсоединение связано с некоторыми сетевыми проблемами (или клиент отменил запрос).

Если это первый случай, тогда это легко: протокол, который вы используете (ваш собственный, или http, или любой другой), отвечает за определение того, как определить, что разговор закончился. Если эта ситуация возникает, вы просто закрываете сокет.

Если это второй случай, тогда вам нужно будет иметь алгоритм, чтобы определить, должно ли соединение быть закрыто. Например, путем реализации тайм-аута или порога медленного чтения. Посмотрите на Socket's javadoc для получения инструкций о том, как установить тайм-аут.

Также стоит отметить, что создавать собственные серверы можно, когда вы хотите попрактиковаться или чему-то научиться, но вам лучше использовать существующее решение, например vert.x или уменьшенную версию Wildfly, для пример. Накладные расходы таких серверов в настоящее время очень низки, но при этом обеспечивают очень надежные сетевые возможности.

+0

сервер зависает, когда клиент отключается, потому что сетевых проблем. Как справиться с этим? У меня есть текстовое представление, к которому я устанавливаю все сообщения, которые получают от клиента. но когда какой-либо клиент отключает текстовое отображение, он непрерывно отображает «нуль» в цикле и, наконец, сбой – Mohit

+0

Ну, и ваш клиент, и ваш сервер должны обрабатывать ситуацию с проблемой сетевого подключения. Как я уже упоминал, класс Socket предоставляет тайм-аут, из которого вы можете справиться с этим случаем. Но есть гораздо больше примеров, чем думать об этом, поэтому моя рекомендация для реальной реализации сервера. – jpkrohling

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