为什么我的服务器程序没有收到命令?

时间:2016-03-25 16:14:25

标签: java

服务器代码:

 try{
  ServerSocket guard=new ServerSocket(6600);
  StackCalculator SC=new StackCalculator();
   while(true){
    SC.currentSocket=guard.accept();
    Socket currentSocket;
    Scanner s=new Scanner(currentSocket.getInputStream());
    PrintWriter pw=new PrintWriter(currentSocket.getOutputStream());
    String request=s.nextLine();
    int num=Integer.parseInt(s.nextLine());
    int reply=PerformCalculation(request,num);//method to perform calculation
    pw.println(reply);
    pw.flush();
 }

客户代码:

  try{
    Socket sc=new Socket("localhost",6600);
    Scanner s=new Scanner(sc.getInputStream());
    PrintWriter pw=new PrintWriter(sc.getOutputStream());
    pw.print("ROOT 4");
    pw.flush();

    String response=s.nextLine();

    System.out.println(response);
    pw.close();
    sc.close();
  }

这是代码的一部分。客户端正在连接到服务器,并且还传递请求。但是服务器没有从Scanner读取它。

2 个答案:

答案 0 :(得分:0)

你甚至都没有初始化" currentSocket",这意味着你在尝试做的时候应该得到一个NullPointerException:" currentSocker.getInputStream()",因为你执行了guard.accept( )在SC.currentSocket上 - 这不是currentSocket。

此外,正如评论员所建议的那样,您在呼叫时绝不会从服务器发送整行:

pw.print("ROOT 4");
pw.flush();

你应该在哪里打电话

pw.println("ROOT 4");
pw.flush();

而且你还在服务器上阅读多行 - 这对我来说似乎是个错误。

答案 1 :(得分:0)

在客户端和服务器上都存在一些错误。你正在向Socket currentSocket;提供从未初始化的内容。在服务器代码上你接受来自客户端bt客户端的2个输入只给出一个input.i修复了服务器端和客户端代码,你可能想尝试一下。

while(true){

    Socket currentSocket =  guard.accept();
    Scanner s=new Scanner(currentSocket.getInputStream());
    PrintWriter pw=new PrintWriter(currentSocket.getOutputStream());
    String request=s.nextLine(); //****accepting first input 
    int num=Integer.parseInt(s.nextLine()); //****accepting second input program is stuck here
    int reply=PerformCalculation(request,num);//method to perform calculation
    pw.println(reply);
    pw.flush();
 }

//客户端代码

 try{
    Socket sc=new Socket("localhost",6600);
    Scanner s=new Scanner(sc.getInputStream());
    PrintWriter pw=new PrintWriter(sc.getOutputStream());
    pw.println("ROOT 4"); //giving out the first input
    pw.println("123");//giving out the second input - should be a number server is expecting a int.
    pw.flush();

    String response=s.nextLine();
    System.out.println(response);

    pw.close();
    sc.close();
  }