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