2014-09-21 13 views
0

자, 간단한 채팅 서버 및 클라이언트를 만들려고합니다. 이 프로그램은 채팅 서버입니다. 두 개의 스레드가 실행 중입니다. 첫 번째 스레드는 모든 클라이언트를 처리하고 ServerSocket을 사용하여 각각의 새 클라이언트를 새 소켓에 바인딩합니다. 두 번째 스레드는 이제 사용자가 연결된 클라이언트에 메시지를 보낼 수있게합니다. 그러나이 스레드 내에서 사용자 입력을 얻을 수는 없습니다. "String inputvar = br.readLine()"문은 실행되지 않습니다! 내가 도대체 ​​뭘 잘못하고있는 겁니까?사용자 입력이 자바 스레드 내에서 작동하지 않습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

public void relay() throws IOException 
     { 
      new Thread(new Runnable() 
      { 
       @Override 
       public void run() 
       { 
         try{ 
          try 
          { 
          while (true) 
          { 

           Socket socket2 = null;  
           Socket socket1 = socketmethod(socket2,0); 
           System.out.println(socket1); 
           BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
           while (socket1 != null) 
           { 
             PrintWriter outputriver = new PrintWriter(socket.getOutputStream(),true); 
             boolean cfd = true; 
             while(cfd==true) 
             { 

              System.out.println("this worked"); 
              System.out.print("Message: "); 
              String inputvar = br.readLine(); 
              System.out.println("this worked2"); 
              if (inputvar.equals("disconnect_now")) 
              { 
               cfd = false; 
              } 
              outputriver.println("Unknown User: " + inputvar); 

             } 
           } 
          } 
          } 
          finally 
          { 
           System.out.println("error 1"); 
          } 
         } 
         catch (IOException e) 
         { 

          System.out.println("Unexpected error: IOException in thread2"); 
         } 
       } 
      }).start(); 
+0

들여 쓰기 공간을 조금 줄이십니까? 나는 동의한다. 요즘는 와이드 스크린이 넓다. 하지만 SO의 콘텐츠 영역이 아니며 가로 스크롤이 번거 롭습니다. –

답변

0

귀하의 클라이언트 연결을 수락하는 곳에서 귀하의 코드를 알 수 없습니다. 당신이 많은 스레드를 가진 여러 클라이언트 요청을 승인하는 경우 나 ... 이런 식으로 뭔가를 볼 수 그러나

public void replay() { 
    try { 
     serverSocket = new ServerSocket(port); 

     while(true) { 
      try { 
       final Socket connection = serverSocket.accept(); 

       new Thread(new Runnable() { 
        @Override 
        public void run() { 
         try { 
          BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
          String value = br.readLine(); 

          PrintWriter pw = new PrintWriter(connection.getOutputStream(), true); 
          pw.println(value); 

을 기대, 당신은 그들이 System.in

경쟁으로 br.readline()에 차단해야합니다 readline() 요구 사항을 충족하기 위해 올바른 "새 라인"문자를 보내고 있는지 확인하십시오.