Java服务器猜测游戏

Jam*_*mes 6 java repeat

我正在创建一个服务器,客户端连接它来玩猜谜游戏,他们也是为了获得积分.

我目前唯一的问题是每当我的客户端正确猜出数字时,它会跳转到服务器并说'server null'.我希望猜测游戏能够继续,直到客户输入'再见' - 他/她得分.

这是我的代码,你可以指出我出错的地方,并告诉我如何实现我想要的.我认为问题出在协议中我可能只需要将时间放在正确的位置,这样就可以了.谢谢大家!只是添加,变量名称奇怪我知道它以前是一个敲敲笑话服务器

协议

import java.util.*;

        public class KKProtocol {
    int guess = 0, number = new Random().nextInt(100) + 1;
    int score = 0;
    Scanner scan = new Scanner(System.in);


    public String processInput(String theInput) {
        String theOutput = null;

        System.out.println("Please guess the number between 1 and 100.");

        while (guess != number) {
          try {
            if ((guess = Integer.parseInt(scan.nextLine())) != number) {
              System.out.println(guess < number ? "Higher..." : "Lower...");
            }
            else {
              System.out.println("Correct!");
              score = 1;
            }
          }   
          catch (NumberFormatException e) {
            System.out.println("Please enter a valid number! If you want to Quit just say'Goodbye'");
          }   

        }   



        return theOutput;   
    }}
Run Code Online (Sandbox Code Playgroud)

服务器

import java.net.*;
import java.io.*;

public class KKServer {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = null;
        boolean listening = true;
        try {
            serverSocket = new ServerSocket(4040);
        } catch (IOException e) {
            System.err.println("Could not listen on port: 4040.");
            System.exit(-1);
        }
        System.err.println("Started KK server listening on port 4040");
        while (listening)  
            new KKThread(serverSocket.accept()).start();
            System.out.println("Accepted connection from client");
            serverSocket.close();
        }
}
Run Code Online (Sandbox Code Playgroud)

线

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

public class KKThread extends Thread {
    private Socket mySocket = null;

    public KKThread(Socket inSocket) {           //super("KKThread");
        mySocket = inSocket;
    }
    public void run() {

        try {
            PrintWriter out = new PrintWriter(mySocket.getOutputStream(), true);
            Scanner in = new Scanner(mySocket.getInputStream());

            String inputLine, outputLine;
            KKProtocol kkp = new KKProtocol();

            outputLine = kkp.processInput(null);        // first time only
            out.println(outputLine);        // (Should be "Knock Knock")

            while (true) {
                inputLine = in.nextLine();                  // read in client input
                outputLine = kkp.processInput(inputLine);   // get reply from protocol
                out.println(outputLine);                    // send it out to socket
                if (outputLine.equals("Bye"))
                    break;
            }
            out.close();
            in.close();
            mySocket.close();

        } catch (Exception e) {
            System.err.println("Connection reset");  //e.printStackTrace();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

客户

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

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

        Socket kkSocket = null;
        PrintWriter out = null;
        Scanner in = null;

        try {
            kkSocket = new Socket("127.0.0.1", 4040);
            out = new PrintWriter(kkSocket.getOutputStream(), true);
            in = new Scanner(new InputStreamReader(kkSocket.getInputStream()));
        } catch (UnknownHostException e) {
            System.err.println("Don't know about host.");
            System.exit(1);
        } catch (IOException e) {
            System.err.println("Couldn't get I/O for the connection");
            System.exit(1);
        }
        Scanner stdIn = new Scanner(System.in);
        String fromServer = in.nextLine();
        while (true) {
            System.out.println("Server: " + fromServer);
            if (fromServer.equals("Bye."))
                break;
            out.println(stdIn.nextLine());
            fromServer = in.nextLine();
        }
        out.close();
        in.close();
        stdIn.close();
        kkSocket.close();
    }
}
'
Run Code Online (Sandbox Code Playgroud)

为什么它跳转到服务器并说'server null'?如何在客户输入"再见"之前继续猜测?

Rei*_*eus 2

您当前没有为scorein分配服务器响应KKProtocol.processInput(),因此返回 anull而是导致您看到的消息:

Server: null
Run Code Online (Sandbox Code Playgroud)

你可以使用:

theOutput = Integer.toString(score);
Run Code Online (Sandbox Code Playgroud)

此外,您的score分数是固定的1,因此您可能希望设计一个可能基于所使用的猜测数量的评分系统。