Socketプログラミングは、IOストリームを使用する上で注意すべき点です.


ソケットプログラミングでは、常にソケット接続後を作成します.InputStreamとOutputStreamを取得し、データの読み込みや書き込みを容易にするためにさらに包装します.ただし、ストリームの使用が間違っていると、データが読み込めなくなる場合があります.
以下はBufferedWriterとPrintWriterを使う際の注意点です.
1.BufferedReaderとBufferedWriterを使う
BufferedReaderとBufferedWriterを使って一回のデータを読み込みますかます書き込むならば、必ずプラスして、1行の終わりを表します.そうでないと、BufferedReaderはデータを読めません.
BufferedReader br = null;
BufferedWriter pw = null;
try {
    br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    pw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
    while (true) {
        String input = br.readLine();
        if (null == input) {
            break;
        }
        System.out.println("        :" + input);
        if ("Server Time".equalsIgnoreCase(input)) {
            //   :     BufferedWriter,    
, BufferedReader readLine() 。
pw.write((new Date()).toString()+"
"
); pw.flush(); } } } catch (IOException e) { System.out.println("ip:" + socket.getInetAddress().getHostAddress() + " I/O "); }
2.BufferedReaderとPrintWriterを使用する
やはりBufferedReaderを使って一度に1行のデータを読み、データを書くのはPrintWriterのprintln()の方法です.また、PrintWriterを構築する際に、atoFush=trueを設定します.
socket = new Socket(host,port);
in = socket.getInputStream();
out = socket.getOutputStream();
PrintWriter pw = new PrintWriter(new OutputStreamWriter(out),true); //     autoFlush=true
BufferedReader br = new BufferedReader(new InputStreamReader(in));
System.out.println("       ");
pw.println("Server Time"); //   println   ,    write()
String response = br.readLine();
System.out.println("response:" + response);