2013-05-17 3 views
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(); 
     } 
    } 
} 

Второй файлBufferedReader ждет линии возврата

/* 
* 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. Вы можете подключиться к серверу, но когда вы это сделаете; он требует, чтобы вы дважды нажали клавишу ввода, прежде чем он начнет правильно принимать ввод. Как заставить BufferedReader пропустить необходимость новой линии, так что, как только вы загрузите сервер он готов -

То, что я хочу -

Добро пожаловать на сервер. Тип A или B или что угодно. A < - Пользовательский ввод YOU TYPED A!

Что он делает - Добро пожаловать на сервер. Пользователь должен нажать enter Пользователь должен нажать enter Тип A или B или что угодно. A < - пользовательский ввод Вы набрали A!

Как я могу заставить BufferedReader подготовиться к немедленному вводу пользователя?

ответ

0

Если вы не хотите читать строки, не вызывайте readLine() и не используйте класс Scanner.

BufferedReader имеет три других метода read(). Используй их.

Если вы хотите вводить символы с консоли, используйте класс консоли.

Смежные вопросы