2012-12-16 91 views
6

我正在创建一个服务器,客户端连接玩一个猜谜游戏,他们也得到这样做的要点。Java服务器猜测游戏

我唯一的问题是,当我的客户端正确猜测数字时,它跳转到服务器并说'服务器为空'。我想让猜谜游戏继续下去,直到客户输入'再见' - 他/她得分。

这里是我的代码,你可以指出我出错的地方,并告诉我如何实现我想要的。我认为问题出在协议上,我可能只需要把时间放在正确的位置,所以这是第一次。谢谢你们! 我想补充,变量名字古怪的我知道这一点,以前是敲门笑话服务器

协议

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; 
    }} 

服务器

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(); 
     } 
} 

主题

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(); 
     } 
    } 
} 

客户端

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(); 
    } 
} 
' 

为什么它跳到服务器并说'服务器为空'?我如何继续猜测,直到客户输入'再见'?

+1

你的问题是什么?你怎么了? – ajacian81

回答

2

您目前没有指定在KKProtocol.processInput()score服务器的响应所以null而是返回所产生的邮件中,你看到:

Server: null 

你可以使用:

theOutput = Integer.toString(score); 

而且你的score固定在1,所以你可能希望设计一个评分系统,也许根据使用的猜测数量。

1

在你的processInput()方法中,你没有返回任何值,但总是null。 看起来,空值在输出中被转换为字符串“null”并发送到客户端。