解决方案 »

  1.   

    flush方法是强制刷新缓冲区。
    何谓缓冲区呢,就是在你本机器上创建一个空间,这个空间可以让你先放些东西进去,比如你os.println进去的内容,如果你不调用flush,那么println进去的内容就只是留在缓冲区中,而不是进入网络传输通道传输到客户端。
    说得有些杂了,举个例子恶心的例子:马桶就是你上面的client端,便池就是你上面的Server端,os.println就是你拉了屎,但你拉屎是拉在马桶的桶身中,如果你不冲一下水(flush方法),那屎就永远停留在桶身中,而不会自动流到便池。
      

  2.   

    flush本意是冲刷,这个方法大概取自它引申义冲马桶的意思,马桶有个池子,你往里面扔东西,会暂时保存在池子里,只有你放水冲下去,东西才会进入下水道。
    同理很多流都有一个这样的池子,专业术语叫缓冲区,当你print或者write的时候,会暂时保存在缓冲区,并没有发送出去,这是出于效率考虑的,因为数据不会自己发送过去,必须有其他机制,而且这个很消耗资源,就像马桶你需要很多水,才能冲走,你如果扔一点东西,就冲一次水,那你水费要爆表了,同样如果你写一行文字,或者一个字节,就要马上发送出去,那网络流量,CPU使用率等等都要爆表了,所以一般只有在你真正需要发送否则无法继续的时候,调用flush,将数据发送出去。
      

  3.   

    import java.io.*;
    import java.net.*;
    public class talkclient
    {
    public static void main(String args[])
    {
    try
    {
    Socket socket = new Socket("127.0.0.1",4700);
    BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
    PrintWriter os = new PrintWriter(socket.getOutputStream());
    BufferedReader is = new BufferedReader(new InputStreamReader(
    socket.getInputStream()));
    String readline;
    readline = sin.readLine();
    while (!readline.equals("bye"))
    {
    os.println(readline);
    os.flush();    //不加就运行不正常
    System.out.println("Client:" + readline);
    System.out.println("Server:" + is.readLine());
    readline = sin.readLine();
    }
    os.close();
    is.close();
    socket.close();
    }catch(Exception e)
    {
    System.out.println("Error" + e);
    }
    }
    }
      

  4.   

    import java.io.*;
    import java.net.*;
    import java.applet.Applet;
    public class talkserver
    {
    public static void main(String args[])
    {
    try
    {
    ServerSocket server = null;
    try
    {
    server = new ServerSocket(4700);
    }catch(Exception e)
    {
    System.out.println("can not listen to:" + e);
    }
    Socket socket = null;
    try
    {
    socket = server.accept();
    }catch(Exception e)
    {
    System.out.println("Error:" + e);
    }
    String line;
    BufferedReader is = new BufferedReader(new InputStreamReader(
    socket.getInputStream()));
    PrintWriter os = new PrintWriter(socket.getOutputStream());
    BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
    System.out.println("Client:" + is.readLine());
    line = sin.readLine();
    while (!line.equals("bye"))
    {
    os.println(line);
    os.flush();
    System.out.println("Server:" + line);
    System.out.println("Client:" + is.readLine());
    line = sin.readLine();
    } is.close();
    os.close();
    socket.close();
    server.close();
    }catch(Exception e)
    {
    System.out.println("Error" + e);
    }
    }
    }
      

  5.   

     两位心有灵犀,都用马桶举例子 哈哈 
    这不是举例子,是因为flush本身就是指冲马桶
      

  6.   

    我当时手机端和电脑端通信时就因为少了这个flush()导致通信不正常,后来研究许久,加上这句就OK了。楼上解释的已经很好了,特来再次学习学习。