2012-10-26 3 views
1

에서 메시지를 가져 오기 내가 읽고 클라이언트 소켓에서 받았다 메시지를 분석 할 필요가 2 등석에있는 청취 클라이언트 소켓방법이 첫 번째 클래스에서 스레드

public void listen() throws IOException {  

     while (true) { 
      socket = this.serverSocket.accept(); 

      DataOutputStream out = new DataOutputStream(socket.getOutputStream()); 
      this.outputStreams.put(socket, out); 


      Thread miltiServer; 

      miltiServer = new Thread() { 
       @Override 
       public void run() {      
        InputStream sin = null; 

        try {     
         sin = socket.getInputStream(); 
         ObjectInputStream in = new ObjectInputStream(sin); 
         message = (AgentData) in.readObject(); 

        } catch (ClassNotFoundException ex) { 

        } catch (IOException ex) { 

        } 
       } 
      }; 

      miltiServer.start(); 
     } 

"수신". 다른 수업에서 메시지를받는 방법을 모르겠습니다. 나는 Callable 인터페이스를 사용할 생각이 있지만 그것을 사용하면 return 문은 무한 사이클을 빠져 나올 것이다.

답변

2

소켓 수신기가 Second 클래스에 메시지를 전달하는 가장 쉬운 방법은 BlockingQueue입니다. 청취자는 소켓 입력 스트림을 읽고 queue.put(...)을 호출하여 메시지를 큐에 추가합니다.

두 번째 클래스는 queue.take();을 호출하는 루프에 있으며 큐에 추가 될 때 각 메시지를 반환합니다. 무제한 메시지를 대기열에 넣으려면 LinkedBlockingQueue이 작동합니다. 메시지를 스로틀하려는 경우 ArrayBlockingQueue과 같은 바운드 큐가 더 적합 할 수 있습니다.

두 스레드가 같은 BlockingQueue 그래서 당신이 그것을 구성하고 두 스레드에 전달하거나 addMessage(...)처럼 Second라는 클래스 뭔가 방법을 넣어해야합니다 공유해야하고 BlockingQueueSecond 클래스의 내부 될 것입니다. 그런 다음 청취자는 second.addMessage(...);이라고합니다.

+0

좋은 답변을 보내 주셔서 감사합니다. –

관련 문제