0

私は最初の telnet サーバーの構築に取り組んでいます。接続できますが、何らかの理由で、最初の接続時にメニューで自動的に失敗します。接続するとすぐに、ウェルカム メッセージが表示され、すぐに、最初の入力は実行可能なオプションではなく、再試行することが示されます。次に、次の選択を正しく行うことができます。

Java が最初の入力を認識しないようにし、ユーザーが実際にキーを押してユーザーからの入力の受け入れを開始するまで待機するにはどうすればよいですか?

私のコード -

public class Sample_server {

  private static int port=4444, maxConnections=5;
  // Listen for incoming connections and handle them
  public static void main(String[] args) {
    int i=0;

    try{
      ServerSocket listener = new ServerSocket(port);
      Socket server;

      while((i++ < maxConnections) || (maxConnections == 0)){
        doComms connection;
        server = listener.accept();
        doComms conn_c= new doComms(server);
        Thread t = new Thread(conn_c);
        t.start();
      }
    } catch (IOException ioe) {
      System.out.println("IOException on socket listen: " + ioe);
      ioe.printStackTrace();
    }
  }

}

class doComms implements Runnable {
    private Socket server;
    private String line,input;

    doComms(Socket server) {
      this.server=server;
    }

    public void run () {

      //input="";

      try {
        // Get input from the client
        DataInputStream in = new DataInputStream (server.getInputStream());
        PrintStream out = new PrintStream(server.getOutputStream());
        out.println("You have connected to the server.");
        out.println("Welcome.");
        try {
            MenuSystemClass newMenu = new MenuSystemClass();
            newMenu.MainMenu(in, out);
        } catch (Exception e) {
            System.out.println("Failed to start the menu");
        }

        // Now write to the client
        System.out.println("Overall message is:" + input);

        server.close();
      } catch (IOException ioe) {
        System.out.println("IOException on socket listen: " + ioe);
        ioe.printStackTrace();
      }
    }
}

マイメニューコード

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sample_server;

import java.io.DataInputStream;
import java.io.PrintStream;
import java.util.Scanner;

/**
 * My Custom Menu Class
 * @author aaron
 */
public class MenuSystemClass {

    public void MainMenu(DataInputStream in, PrintStream out) {
        // Set Run Boolean to true
        boolean running = true;
        // We switch the input to lowecase here and compare
        while(running) {
            out.println("A: New Char ; V: View ; W: Start Game; S: Save ; D: Delete ; Q: Quit");
            // Initialize the scanner
            Scanner user_input = new Scanner(in);
            // Get the user input
            String decision = user_input.next();
            // Conver their decision to lowercase and compare to choices.
            switch (decision.toLowerCase()) {
                case "a":
                    out.println("This is not yet implemented.");
                    break;
                case "s":
                    out.println("This is not yet implemented.");
                    break;
                case "d":
                    out.println("This is not yet implemented.");
                    break;
                case "v":
                    out.println("This is not yet implemented.");
                    break;
                case "w":
                    out.println("This is not yet implemented.");
                    break;
                case "q":
                    return;
                default:
                    out.println("You did not select a viable option.");
                    out.println("Try again.");
                    break;
            }
        }
    }
}

私の人生では、最初の通信が起こっていることを無視して、ユーザーが実際に意図的に何らかの入力を入力するまで待つことはできません。

4

1 に答える 1