2013-05-17 67 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服務器。你可以連接到服務器,但是當你這樣做的時候;它要求您在開始正確接受輸入之前按兩次Enter鍵。如何強制的BufferedReader跳過新生產線的必要性,這樣只要你加載它已準備好服務器 -

我想要什麼 -

歡迎到服務器。 A型或B型或無論如何。 A < - 用戶輸入 您鍵入了!

它在做什麼 - 歡迎使用服務器。 用戶必須按回車鍵 用戶必須按回車鍵 類型A或B或其他。 A < - 用戶輸入 您鍵入A!

我該如何讓BufferedReader準備立即接受用戶輸入?

回答

0

如果您不想讀取行,請不要調用readLine(),也不要使用Scanner類。

BufferedReader有三個其他的read()方法。使用它們。

如果要從控制檯輸入字符,請使用Console類。