0
package sample_server;

import java.io.*;
import java.net.*;
import java.security.*;

/**
 * Title:        Sample Server
 * Description:  A simple telnet server
 * @author A. Jones
 * @version 0.01
 */

public class Sample_server {

  private static int port=4444, maxConnections=0;
  // 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;

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

    public void run () {
      try {
        // Get input from the client
        BufferedReader in = new BufferedReader(new InputStreamReader(server.getInputStream()));
        PrintStream out = new PrintStream(server.getOutputStream());
        System.out.println("A user has connected to the server.");
        out.println("You have connected.");
        MenuSystemClass newMenu = new MenuSystemClass(in, out);
        newMenu.MainMenu(server);
      } catch (IOException ioe) {
        System.out.println("IOException on socket listen: " + ioe);
        ioe.printStackTrace();
      }
    }
}

2 番目のファイル

/*
 * Menu System Class
 * Simple to use menu
 */
package sample_server;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.PrintStream;
import java.util.Scanner;

/**
 * My Custom Menu Class
 * @author aaron
 */
public class MenuSystemClass {
    private BufferedReader input = null;
    private PrintStream output = null;

    MenuSystemClass(java.io.BufferedReader in, PrintStream out) {
        input  = in;
        output = out;
    }

    public void MainMenu(java.net.Socket server) throws IOException {
        // Set Run Boolean to true
        boolean running = true;
        // We switch the input to lowecase here and compare
        while(running) {
            output.println("A: Stuff ; V: Things ; W: More Stuff; S: Also Stuff ; D: Delete ; Q: Quit");
            // Initialize the scanner
            Scanner user_input = new Scanner(input);
            // Get the user input
            String decision = user_input.next();
            // Conver their decision to lowercase and compare to choices.
            switch (decision.toLowerCase()) {
                case "a":
                    output.println("This is not yet implemented.");
                    break;
                case "s":
                    output.println("This is not yet implemented.");
                    break;
                case "d":
                    output.println("This is not yet implemented.");
                    break;
                case "v":
                    output.println("This is not yet implemented.");
                    break;
                case "w":
                    output.println("This is not yet implemented.");
                    break;
                case "q":
                    server.close();
                    System.out.println("A connection has been terminated by the client.");
                    return;
                default:
                    output.println("You did not select a viable option.");
                    output.println("Try again.");
                    break;
            }
        }
    }
}

telnetサーバーを作ろうとしています。サーバーに接続できますが、接続すると; 入力を適切に受け入れ始める前に、Enter キーを 2 回押す必要があります。サーバーをロードするとすぐに準備ができるように、BufferedReaderに新しい行の必要性をスキップさせるにはどうすればよいですか-

私が欲しいもの -

サーバーへようこそ。タイプAまたはBまたは何でも。A <-- ユーザー入力 YOU TYPED A!

何をしているのか - サーバーへようこそ。ユーザーはエンターを押さなければなりません ユーザーはエンターを押さなければなりません タイプ A または B または何でも。A<-- ユーザー入力 A と入力しました!

BufferedReader にユーザー入力をすぐに受け取る準備をさせるにはどうすればよいですか?

4

1 に答える 1

0

行を読みたくない場合は、readLine() を呼び出さないでください。また、Scanner クラスを使用しないでください。

BufferedReader には他に 3 つの read() メソッドがあります。それらを使用します。

コンソールからの文字入力が必要な場合は、Console クラスを使用します。

于 2013-05-17T21:56:08.930 に答える