服务器代码:
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读取它。
答案 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();
}