2012-12-16 19 views
6

Tôi đang tạo một máy chủ nơi khách hàng kết nối để chơi trò chơi đoán họ cũng có được điểm từ việc này.Java Server Guessing Game

Vấn đề duy nhất của tôi tại thời điểm này là bất cứ khi nào khách hàng của tôi đoán số chính xác nó nhảy tới máy chủ và nói 'máy chủ vô hiệu'. Tôi muốn trò chơi đoán tiếp tục cho đến khi khách hàng đầu vào 'lời tạm biệt' - trên đó điểm của anh ta/cô ấy được đưa ra.

Đây là mã của tôi, bạn có thể chỉ ra nơi tôi đã đi sai và tư vấn cho tôi về cách tôi sẽ đạt được những gì tôi muốn. Tôi nghĩ rằng vấn đề là trong giao thức tôi có lẽ chỉ cần đặt trong khi ở đúng nơi, vì vậy đó là lên đầu tiên. Cảm ơn ba mẹ! Chỉ cần thêm, các biến được đặt tên kỳ quặc Tôi biết điều này đó là trước đó một tiếng gõ gõ đùa máy chủ

Nghị định thư

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

server

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

Chủ đề

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

Khách hàng

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

Tại sao nó chuyển sang máy chủ và nói 'máy chủ không có'? Làm cách nào để tiếp tục đoán cho đến khi khách hàng nhập 'tạm biệt'?

+1

Câu hỏi của bạn là gì? Có chuyện gì vậy? – ajacian81

Trả lời

2

Bạn đang không gán phản ứng máy chủ cho score trong KKProtocol.processInput() do đó, một null được trả lại thay vì kết quả là thông điệp mà bạn nhìn thấy:

Server: null 

Bạn có thể sử dụng:

theOutput = Integer.toString(score); 

Cũng score của bạn được cố định tại 1, do đó bạn có thể muốn đưa ra một hệ thống tính điểm dựa trên số lần đoán được sử dụng.

1

Trong phương thức processInput(), bạn không trả lại bất kỳ giá trị nào, nhưng allways null. Dường như giá trị null được chuyển thành chuỗi "null" trên đầu ra và được gửi tới máy khách.