2012-02-16 3 views
1

콘솔에 아무 것도 인쇄되지 않는 이유는 무엇입니까?내 서버 및 클라이언트 소켓 프로그램이 아무 것도 인쇄하지 않고 멈 춥니 다

각 클라이언트에 대해 새 스레드를 시작하는 서버 소켓이 있습니다. 그것은 클라이언트에서 라인을 읽고 그것을 출력하고 자신의 응답을 보냅니다. 이것은 클라이언트 측에 인쇄됩니다. 여기 코드는 다음과 같습니다

클라이언트 코드 :

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.io.PrintWriter; 
import java.net.Socket; 

public class Client { 
    public static void main(String[] args) { 
     PrintWriter out = null; 
     BufferedReader in = null; 
     Socket echoSocket=null; 
     try { 
      echoSocket = new Socket("localhost", 8999); 
      out = new PrintWriter(echoSocket.getOutputStream(), true); 
      in = new BufferedReader(new InputStreamReader(echoSocket.getInputStream())); 
      for(int i=0;i<20;i++) { 
       out.print("Sending to Server"+i); 
       System.out.println("Received from Server"+in.readLine()); 
      } 

     } catch (Exception e) { 
      e.printStackTrace(); 
     }finally { 
      try { 
       try { 
        in.close(); 
       } finally { 
        try { 
         out.close(); 
        } finally { 
         echoSocket.close(); 
        } 
       } 
      } catch (Exception e2) { 
       e2.printStackTrace(); 
      } 
     } 
    } 
}  

서버 코드 : 하나 잘

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.PrintWriter; 
import java.net.ServerSocket; 
import java.net.Socket; 
import java.util.concurrent.Callable; 
import java.util.concurrent.Executor; 
import java.util.concurrent.ExecutorService; 
import java.util.concurrent.Executors; 

public class Server { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     try { 
      final ServerSocket server = new ServerSocket(8999); 
      final ExecutorService threadPool = Executors.newFixedThreadPool(2); 
      while (true) { 
       try { 
        final Socket sock = server.accept(); 
        threadPool.submit(new Callable<Void>() { 
         @Override 
         public Void call() throws Exception { 
          BufferedReader br = null; 
          PrintWriter out = null; 
          try { 
           br = new BufferedReader(new InputStreamReader(sock.getInputStream())); 
           out = new PrintWriter(sock.getOutputStream(), true); 
           for (int i = 0; i < 20; i++) { 
            String readLine = br.readLine(); 
            System.out.println(readLine); 
            out.print(readLine + "response"); 
           } 
          } finally { 
           try { 
            br.close(); 
           } finally { 
            try { 
             out.close(); 
            } finally { 
             sock.close(); 
            } 
           } 
          } 
          return null; 
         } 
        }); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 

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

    } 

} 

답변

1

, 당신은 클라이언트와 서버 모두에서 아마 println 대신 (당신의 작가에 print의를해야).

+0

고맙습니다. BufferedReader는 결코 전체 라인을 얻지 못합니다 .. :) –

관련 문제