Java客户端程序已成功连接到服务器,但它未传递任何数据

时间:2016-03-16 18:51:07

标签: java

服务器代码:

public class StackCalculator implements Runnable {

static Stack<Integer> numbers=new Stack<Integer>(); 
Socket currentSocket;
Scanner s;
PrintWriter pw;
public static void main(String[] args){
 try{
     ServerSocket guard=new ServerSocket(6600);
     StackCalculator SC=new StackCalculator();
    while(true){
         SC.currentSocket=guard.accept();
         System.out.println("Client connected");
         Thread t=new Thread(SC);
         t.start();
     }


 }catch(Exception e){
    e.printStackTrace();
 }
 }
public void run(){

try{
try{
 s=new Scanner(currentSocket.getInputStream());
 pw=new PrintWriter(currentSocket.getOutputStream());
doService();

}finally{
    currentSocket.close();
}
}catch(Exception e){
e.printStackTrace();
}
}
public void doService(){

 if(s.hasNext()==false){
     return;
 }
 String request=s.next();
    System.out.println("Request received:"+request);
 PerformCalculation(request);
 }
 public void PerformCalculation(String request){
 if(request.equals("PUSH")){
   try{
    String num=s.next();
     int n=Integer.parseInt(num);
     StackCalculator.numbers.push(n);
     pw.println("OK");
  }catch(NumberFormatException nf){
     pw.println("ERROR");
  }
 }else if(request.equals("ADD")){
     if(StackCalculator.numbers.size()<2){
         pw.println("TOO_FEW_ELEMENTS");
     }else{
         int n1=StackCalculator.numbers.pop();
         int n2=StackCalculator.numbers.pop();
         int ns=n1+n2;
         pw.println("RESULT "+ns);
     }
 }else if(request.equals("MULT")){
    if(StackCalculator.numbers.size()<2){
        pw.println("TOO_FEW_ELEMENTS");
    }else{
        int n1=StackCalculator.numbers.pop();
         int n2=StackCalculator.numbers.pop();
         int ns=n1*n2;
        pw.println("RESULT "+ns);
     }
  }else if(request.equals("QUIT")){
    pw.close();
    s.close();

}else{
    System.out.println("Unknown Command");
}
}

}

客户端代码:

      public static void main(String[] args) {

     try{
    Socket sc=new Socket("localhost",6600);
    Scanner s=new Scanner(sc.getInputStream());
    PrintWriter pw=new PrintWriter(sc.getOutputStream());
    pw.print("PUSH 11");
    System.out.println("response created");
    String response=s.nextLine();

    System.out.println(response);
    pw.close();
    sc.close();
  }catch(Exception e){
    e.printStackTrace();
  }
 }

它没有传递数据,也没有显示任何错误,也没有程序自行终止。我让代码运行了一个多小时但没有显示进度。它是处于死锁的情况还是输入/输出流的某些问题。

1 个答案:

答案 0 :(得分:2)

PrintWriter.print不会自动刷新,因此您永远不会发送任何内容。您应该使用println,或在flush()

之后致电print(...)