数学服务器和客户端的Java不工作(Math Server and Client Java not

2019-11-01 12:03发布

我是新来的Java计算机网络,而不是在首位的编程如此之大,但是,我能建造这种服务器和客户端是应该接受只有一行。 函数(加,分,分)和两个整数,然后计算并打印答案。 我能够连接两个,但是当我在里面输入线什么都不做。 任何有识之士将不胜感激。 谢谢!

服务器

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
import java.lang.Math;


public class MathServer
{


  public static void main(String[] args) throws IOException 
  {

     ServerSocket yourSock = new ServerSocket(50000);
     System.out.println("Please Wait....");

     while(true)
     {
        Socket clientSock = yourSock.accept();
        System.out.println("Connected!");
        process(clientSock);


     }


  }

  static void process(Socket sock) throws IOException
  {
     InputStream in = sock.getInputStream();
     BufferedReader br = new BufferedReader(new InputStreamReader(in));

     OutputStream out = sock.getOutputStream();
     PrintWriter pw = new PrintWriter(out,true);

  //Talk to the client
     String input = br.readLine();

     while(input != null && !input.equals("disconnect"))
     {  

        Scanner sc = new Scanner(System.in);
        String func = sc.nextLine();
        double num1 = sc.nextInt();
        double num2 = sc.nextInt();

        double answer;          

        switch (func)
        {
           case "add":  answer = num1 + num2;
              System.out.println(answer);
              break;

           case "sub":  answer = num1 - num2;
              pw.println(answer); 
              break;

           case "multiply":  answer = num1 * num2;
              pw.println(answer);        
              break;

           case "power":  answer = Math.pow(num1, num2);
              pw.println(answer);
              break;

           case "divide":  answer = num1 / num2;
              pw.println(answer);         
              break;

           case "remainder": answer = num1 % num2;
              pw.println(answer);       
              break;

           case "square": answer = Math.sqrt(num1) ;
              pw.println(answer);       
              break;

           case "cube": answer= Math.cbrt(num1);
              pw.println(answer);        
              break;



        }

        sock.close();
     }

  }
}

客户

import java.io.*;
import java.net.Socket;
import java.util.Scanner;


public class Client
{


  public static void main(String[] args) throws Exception
  {
     Socket Sock = new Socket("localhost", 50000);
     BufferedReader br = new BufferedReader(new InputStreamReader(Sock.getInputStream()));
     PrintWriter pw = new PrintWriter(Sock.getOutputStream(), true);


     Scanner sc = new Scanner(System.in);
     String input;


     while(true)
     {
     //System.out.println("Please enter your function and numbers:");
        input = sc.nextLine();

        pw.println(input);

        if(input.equals("disconnect"))
        {
           System.out.println("You have been disconnected");
           break;

        }


        System.out.println(br.readLine());
     }

     Sock.close();

  }


}

Answer 1:

  • 您需要安排您发送和接收您的客户端和服务器之间的数据的顺序。
  • 正如@Jacob提到的,你是从阅读System.in ,而不是你的输入数据,可以从输入读取String
  • 放置readLine你的内声明while statemet继续从客户端读取。

这将是这样的:

String input;
while ((input = br.readLine())!= null && !input.equals("disconnect")) {
   Scanner sc = new Scanner(input);
   String func = sc.next();
   double num1 = sc.nextDouble();
   double num2 = sc.nextDouble();
   ...
}

接下来,将您sock.close()语句你之外 while循环。

现在,你的输入来自客户端的命令会出现在一行,如

add 12 15

也刷新您的客户端的数据:

pw.flush();


Answer 2:

你是混合扫描仪,从System.in读取和代码中的网络连接。

例如,为什么你想在命令行服务器来读取输入?

Scanner sc = new Scanner(System.in);
String func = sc.nextLine();
double num1 = sc.nextInt();
double num2 = sc.nextInt();

例如,您可以拆分您接收输入,并使用字符串分割法从中计算



Answer 3:

我认为这个问题是在服务器代码,行

    Scanner sc = new Scanner(System.in);

你应该用你自己的输入流:

Scanner sc = new Scanner(in);

我以前没有使用过扫描仪。 另一种方法,这是阅读的东西的字符串,并根据需要进行转换,如的Integer.parseInt()



文章来源: Math Server and Client Java not working