解决方案 »

  1.   

    java编程高级进阶里面有提到,现成代码,稍微改下。
      

  2.   

    服务端
    package csdn;import java.io.*;
    import java.net.*;public class TestServer { public static void main(String[] args) {
    try {
    ServerSocket ss = new ServerSocket(5566);
    Socket s = ss.accept();
    System.out.println("connect"); BufferedReader br = new BufferedReader(new InputStreamReader(
    s.getInputStream()));
    PrintWriter pw = new PrintWriter(new OutputStreamWriter(
    s.getOutputStream()));
    BufferedReader sin = new BufferedReader(new InputStreamReader(
    System.in));
                //服务端接受客户端信息
    String str =br.readLine();
    if(str!=null){
    System.out.println("client:---" + str);
    }
    //服务端回话 
    System.out.println("请输入一句话");
    String st =null;
    while((st=sin.readLine()) != null) {
    pw.println(st);
    pw.flush();
    }
    br.close();
    pw.close();
    s.close();
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }
    客户端
    package csdn;import java.io.*;
    import java.net.*;public class TestClient { public static void main(String[] args) {
    try {
    Socket s = new Socket("localhost", 5566);
    PrintWriter pw = new PrintWriter(new OutputStreamWriter(
    s.getOutputStream(),"gbk"));
    BufferedReader br = new BufferedReader(new InputStreamReader(
    s.getInputStream(),"gbk"));
    BufferedReader sin = new BufferedReader(new InputStreamReader(
    System.in));
                 //客户端发送信息
     System.out.println("请输入一句话");
     String ss = null;
    while ((ss=sin.readLine()) != null) {
    pw.println(ss);
    pw.flush();//清除缓存
    //接收来自服务端的信息
    String str = br.readLine();
    System.out.println("Server:---" + str);
    }
                
    pw.flush();
    pw.close();
    br.close();
    s.close(); } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }
    建议还是不用BufferWriter 改用PrintWriter吧
      

  3.   

    你这里的问题物品我没试 
    但我记得以前遇到个一个问题:利用BufferedWriter 的writ( String) 写时,在另一边有BufferedReader的readline()读会出现一个问题.
    即readline()会一直阻塞,因为它读不到结束的标志。
    解决办法:在write(String) 后在加一句 newLine();还有就是每写一句马上记得fush()
      

  4.   

     在加一句:所以觉得还是pringWriter好用些
      

  5.   


    确实是IO流不同的问题引起的
    服务端:String str=br.readLine(); 
    首先要了解这个地方什么情况下才会返回,需要读到一行数据才会返回,怎么判断是否有一行数据呢,就是数据需要带有\r\n换行符
    了解这一点后再看你的客户端是怎么写的
    bw.write(ss);
    这里的ss是一段字符串,它并没有以\r\n结尾,所以你需要改成如下即可:
    if (ss != null) {
        bw.write(ss + "\r\n"); //手动加上换行符
        bw.flush(); //BufferedWriter类带有缓冲功能,所以需要调用该方法把数据马上发送出去
    }
    你后面虽然写了 bw.flush(); ,但是被String str = br.readLine();这句代码阻塞了,得不到执行的机会。