数学服务器和客户端Java不工作
我是Java计算机网络新手,一开始并不擅长编程,但是,我能够构建这个服务器和客户端,它应该只接受一行代码。一个函数(加法、减法、除法)和两个整数,然后计算并打印答案。我可以把这两个连接起来,但当我把这条线打进去时,它什么也没做。如有任何见解,将不胜感激。谢谢大家! 服务器数学服务器和客户端Java不工作,java,networking,Java,Networking,我是Java计算机网络新手,一开始并不擅长编程,但是,我能够构建这个服务器和客户端,它应该只接受一行代码。一个函数(加法、减法、除法)和两个整数,然后计算并打印答案。我可以把这两个连接起来,但当我把这条线打进去时,它什么也没做。如有任何见解,将不胜感激。谢谢大家! 服务器 import java.io.*; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; import java.lan
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();
}
}
您正在混合从System.in读取的扫描仪和代码中的网络连接 例如,为什么要从命令行读取服务器中的输入
Scanner sc = new Scanner(System.in);
String func = sc.nextLine();
double num1 = sc.nextInt();
double num2 = sc.nextInt();
例如,您可以使用String的split方法拆分接收到的输入并从中计算。我认为问题出在服务器代码第行
Scanner sc = new Scanner(System.in);
您应该使用自己的输入流:
Scanner sc = new Scanner(in);
我以前没用过扫描仪。另一种方法是以字符串形式读取内容并根据需要进行转换,例如Integer.parseInt()- 您需要安排在客户端和服务器之间发送和接收数据的顺序李>
- 正如@Jacob所提到的,您正在从
中,您可以从输入的系统中读取数据。在
中读取数据字符串
- 将
语句放在readLine
语句中,而
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();
您是否使用Eclipse之类的调试器对代码进行了STP测试?请在代码中添加日志记录。