客户机这端:
public void run(){  
try {
in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
out =new PrintWriter(
                     new BufferedWriter(
                          new OutputStreamWriter(socket.getOutputStream())),true);
     
System.out.println(new GetDate().getTime()+":客户机开始发送请求Client");
     
out.println("Client");
    
System.out.println(new GetDate().getTime()+":客户机发送完请求Client");
    
String ok = in.readLine(); System.out.println(new GetDate().getTime()+":客户机收到回复"+ok); } catch(Exception e){ 
     System.out.println("connectServerException");
}
    
} 服务器这端:public void run(){ 
try {
      
ServerSocket s = new ServerSocket(PORT);
while (true) {
 
//等待接收客户请求
Socket socket = s.accept(); 

BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
PrintWriter out = new PrintWriter(
                        new BufferedWriter(
                             new OutputStreamWriter(socket.getOutputStream())),true);


String ID = in.readLine();
 
System.out.println(new GetDate().getTime()+":服务器收到请求"+ID);

if(ID.equals("管理员")){ 
OperateManageRequest omr = new OperateManageRequest(socket);
omr.start();
}else{                   //因为我客户端开始传来了一个ID为:"Client",所以这里为他开启了一个
                  //线程 OperateClientRequest 来处理这个客户的需求
OperateClientRequest ocr = new OperateClientRequest(socket);
ocr.start();
}
   
}
 
}catch (Exception e){}

}  处理客户需求的线程 OperateClientRequest:public class OperateClientRequest  extends Thread{

private Socket s;
 
public OperateClientRequest (Socket int_s) { s = int_s; }

public void run(){ 

             try {BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream())); 
PrintWriter out =new PrintWriter( 
     new BufferedWriter( 
  new OutputStreamWriter(s.getOutputStream())),true);
           
      System.out.println(new GetDate().getTime()+":服务器开始发送回复");

      sleep(1000);

      System.out.println(new GetDate().getTime()+":服务器发送回复中40%");

      sleep(1000);

      System.out.println(new GetDate().getTime()+":服务器发送回复中80%");

      //服务器发送回复
      out.write("服务器已经与您建立了连接");

      System.out.println(new GetDate().getTime()+":服务器发送完回复");
          
}catch (Exception e){
System.out.println("OperateClientRequestException");
}finally { 

try{
sp.addNote("断开与用户"+clientName+"的连接"); 
s.close();
}catch (IOException ioe){}
 
}
            } 
}
最后客户发送"Client" 服务器接到了,服务器回复了"服务器已经与您建立了连接",但是客户机接不到这个回复是为什么啊?屏幕上的显示是:
客户机端:20:46:42:客户机开始发送请求Client
20:46:42:客户机发送完请求Client服务器端:
20:46:42:服务器收到请求Client
20:46:43:服务器开始发送回复
20:46:44:服务器发送回复中40%
20:46:45:服务器发送回复中80%
20:46:45:服务器发送完回复郁闷中。

解决方案 »

  1.   

    String ok = in.readLine();
    这里ok返回是什么值你跟下看看
      

  2.   

    晕,我找到错哪里了
    out.write("服务器已经与您建立了连接");  
    应该是 out.println
    晕啊,在这上面浪费了2天
      

  3.   

    out.write("服务器已经与您建立了连接");
    在这一句之后加
    out.flush();
      

  4.   

    out.write()没错;
    但后面要加out.flush();
      

  5.   

    BufferedReader 和 PrintWriter等都是有缓冲的,Server端的主线程和子线程在Socket.getOutputStream上重复使用了BufferedReader和PrintWriter,这是不可以的。
    你把主线程的BufferedReader in和PrintWriter out也传递给子线程OperateClientRequest看看。
      

  6.   

    还有上面提到的,PrintWriter 最好用out.println,别用out.write。否则一定要加上out.flush