2012-02-16 15 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(); 
      } 
     } 
    } 
}  

サーバコード:あなたの作家の1、あなたがすべきおそらくprintln代わりにprintためまあ

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

は(クライアントとサーバーの両方で)。

+0

THANKS .. BufferedReaderは、それ以外の場合は行全体を取得しません。:) –

関連する問題