2013-12-13 3 views
0

클라이언트가 연결될 때마다 클라이언트가 연결을 끊을 때마다 다중 클라이언트/서버 응용 프로그램을 만듭니다. 내가 나에게 어떤 메시지를 인쇄 말할 것이다 어떤 조건을 설정하는 방법 때마다 서버 여기 에서 모든 클라이언트 연결이 끊어 그것은 당신이 무슨 뜻인지 분명하지 않다 어떤 도움이클라이언트가 연결을 끊을 때 서버가 응답을 멈 춥니 다

+0

어떻게 작동하지 않습니까? 새로운 연결을 수락하지 않거나 CommunicationThread가 멈 춥니 다. –

+0

나는 클라이언트로부터받은 모든 메시지를 설정하는 textview를 가지고있다. 하지만 때마다 어떤 클라이언트 diconnectes textview 표시 클라이언트가 : null 및이 루프에 가서 마지막으로 내 응용 프로그램 충돌이 발생합니다. – Mohit

+0

그래, 그냥 문자열을받을 일부 포트에서 수신, 뭔가를 받으면 서버를 중지하십시오 :) –

답변

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(); 
      } 
     } 
    } 

} 

입니다 대화가 끝났거나 (즉, 모든 것이 성공적으로 완료 되었기 때문에) 연결이 끊어 지거나 일부 네트워크 문제 (또는 클라이언트가 요청을 취소 함)로 인해 연결이 끊어졌습니다.

첫 번째 경우라면 사용중인 프로토콜 (자신 또는 http 또는 기타)이 대화가 끝났음을 확인하는 방법을 정의하는 책임이 있습니다. 그런 상황이 발생하면 소켓을 닫으십시오.

두 번째 경우에는 연결을 닫아야하는지 여부를 결정하는 알고리즘이 있어야합니다. 예를 들어, 시간 초과 또는 느린 읽기 임계 값을 구현합니다. 시간 제한 설정 방법에 대한 지침은 Socket's javadoc을 참조하십시오.

연습이나 학습을 원할 때 자신의 서버를 만드는 것이 좋지만 vert.x 또는 Wildfly의 슬림 다운 버전과 같은 기존 솔루션을 사용하는 것이 좋습니다. 예. 이러한 서버의 오버 헤드는 오늘날 매우 낮지 만 여전히 매우 강력한 네트워킹 기능을 제공합니다.

+0

때문에 클라이언트가 끊어지면 서버가 중단됩니다 정확히 어떻게 처리 할 수 ​​있습니까? 나는 클라이언트에서받는 모든 메시지를 설정하고있는 textview 있습니다. 하지만 클라이언트가 연결을 끊으면 루프가 계속해서 "null"로 표시되어 결국 충돌합니다. – Mohit

+0

클라이언트와 서버 모두 네트워크 연결 문제를 처리해야합니다. 앞서 언급했듯이 Socket 클래스는이 경우를 처리 할 수있는 시간 초과를 제공합니다. 하지만 생각보다 훨씬 많은 경우가 있기 때문에 실제 서버 구현에 대한 권장 사항입니다. – jpkrohling

관련 문제