Server:import java.net.*;
import java.io.*;public class TalkServer {
public static void main(String[] args) throws Exception { ServerSocket ss =new ServerSocket(8888);

Socket s =ss.accept();
System.out.println("A Client Connect"); String line; BufferedReader br =new BufferedReader(new InputStreamReader(System.in)); PrintWriter pw =new PrintWriter(s.getOutputStream());

  BufferedReader bur =new BufferedReader(new InputStreamReader(s.getInputStream()));
  
  System.out.println(bur.readLine());
line =br.readLine();
while(!line.equalsIgnoreCase("exit")) {
pw.println(line);
pw.flush();
System.out.println("Server :" +line);
System.out.println(bur.readLine());
line =br.readLine();
}

}
}Client:import java.net.*;
import java.io.*;public class TalkClient {
public static void main(String[] args) throws Exception {
//请求连接
Socket s =new Socket("127.0.0.1" ,8888);
String line ;
//读取键盘输入
BufferedReader br =new BufferedReader(new InputStreamReader(System.in));
OutputStream os =s.getOutputStream();
//获得输出流
PrintWriter pw =new PrintWriter(os);
//获得输入流读取Server端数据
BufferedReader bur =new BufferedReader(new InputStreamReader(s.getInputStream()));
line =br.readLine();   while(!line.equalsIgnoreCase("exit")) {
  pw.println(line);
  pw.flush();
  System.out.println("Client :" +bur.readLine());
  line =br.readLine();
  }
}
}
写了个点对点通信的代码,刚开始死活调试不成功(就是我客户端说句话,服务器始终接收不到),经历了痛苦的折磨后,我把Server和Client端的循环里面加了个pw.flush()的方法就好了,不是PrintWriter类自带flush功能(autoflush)吗?
为什么发送数据的时候一定要flush才能接收呢?我纯菜鸟,大家指点,谢谢

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【yihaijian1】截止到2008-08-03 16:51:51的历史汇总数据(不包括此帖):
    发帖的总数量:6                        发帖的总分数:260                      每贴平均分数:43                       
    回帖的总数量:32                       得分贴总数量:6                        回帖的得分率:18%                      
    结贴的总数量:6                        结贴的总分数:260                      
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:0                        未结的总分数:0                        
    结贴的百分比:100.00%               结分的百分比:100.00%                  
    无满意结贴率:0.00  %               无满意结分率:0.00  %                  
    敬礼!

    取消马甲机器人,请点这里:http://www.java2000.net/mycsdn/robotStop.jsp?usern=yihaijian1
      

  2.   

    flush是要自己给写的。。
    系统自动的是垃圾回收
      

  3.   

    PrintWriter pw =new PrintWriter(os,true);
      

  4.   


    在建立pringWriter实例时,需要用boolean型指定,是不是自动刷新,如果没有指定自动刷新,则需要自己来flush.
      

  5.   

    自动的flush要符合几个基本原则
    我记得一个是当流关闭时,会讲缓冲区数据自动输出
    一个是当流所在的通道的状态变化时,会使缓冲区输出
    一个是当缓冲区满时,会输出你可以自己考虑下,什么叫缓冲?
    flush的作用就是将缓冲的数据压出