2012-12-16 23 views
6

मैं एक सर्वर बना रहा हूं जहां ग्राहक अनुमान लगाने वाले गेम खेलने के लिए कनेक्ट होते हैं, वे इसे करने से भी अंक प्राप्त कर सकते हैं।जावा सर्वर अनुमान गेम

इस समय मेरी एकमात्र समस्या यह है कि जब भी मेरा क्लाइंट सही ढंग से संख्या का अनुमान लगाता है तो यह सर्वर पर कूदता है और 'सर्वर नल' कहता है। मैं अनुमान लगाता हूं कि क्लाइंट इनपुट 'अलविदा' तक जारी रहेगा - जिस पर उसका स्कोर दिया गया है।

यहां मेरा कोड यह बता सकता है कि मैं कहां गलत हो गया हूं और मुझे सलाह देता हूं कि मैं जो चाहता हूं उसे प्राप्त करूंगा। मुझे लगता है कि समस्या प्रोटोकॉल में है, शायद मुझे सही जगह पर थोड़ी देर की जरूरत है, तो यह पहले है। धन्यवाद दोस्तों! बस को जोड़ने के लिए, चर अजीब तरह से मैं कर रहा हूँ यह पहले से एक दस्तक था दस्तक मजाक सर्वर

प्रोटोकॉल

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। ऐसा लगता है कि शून्य मान आउटपुट पर स्ट्रिंग "नल" में परिवर्तित हो गया है और क्लाइंट को भेजा गया है।