2012-12-16 15 views
6

私は、クライアントが推測ゲームをするために接続するサーバーを作成しており、これを行うことから得点を得ることもできます。Java Server Guessing Game

私の唯一の問題は、私のクライアントが正しく番号を推測するたびに、サーバにジャンプして「サーバヌル」と言うことです。クライアントがスコアを入力するまで、推測ゲームを続行します。

ここに私のコードがあります。間違ったところを指摘して、私が望むものを達成する方法を教えてください。私は問題がプロトコルの中にあると思うのですが、私はちょうどその場所を正しい場所に置く必要があるでしょう、それが最初です。ありがとうございました! はただ、追加、変数が奇妙な名前が付けられますし、私はこのことを認識だ、それは冗談サーバーをノック

プロトコル

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

なぜそれがサーバーにジャンプし、 'server null'と表示されますか?クライアントが「さようなら」を入力するまで推測を続けるにはどうすればよいですか?

+1

お困りですか?何がおかしいの? – ajacian81

答えて

2

あなたは現在とてもnullが代わりにあなたが見るメッセージで結果が返されKKProtocol.processInput()scoreのためのサーバの応答を割り当てるされていません。あなたが使用することができ

Server: null 

theOutput = Integer.toString(score); 

score1に固定されていますので、使用した推測の数に基づいてスコアリングシステムを考案することをお勧めします。

1

processInput()メソッドでは、値は返されませんが、すべてnullです。 null値が出力の文字列 "null"に変換され、クライアントに送信されるようです。