【问题标题】:Java Sockets ServerSide InputJava 套接字服务器端输入
【发布时间】:2017-07-10 16:03:03
【问题描述】:

感谢您花时间看我的小问题。

我最近接触了 Java 套接字,并在此处查找了一个多客户端聊天应用程序的简单教程http://cs.lmu.edu/~ray/notes/javanetexamples/ 这是页面上的最后一个示例。

它工作正常,但我也想处理服务器端输入,比如根据命令断开某些用户的连接或类似的东西,只是“监听”服务器控制台中的用户输入,我似乎无法绕开我的头在这种特定情况下。

try {
        while (true) {
            new Handler(listener.accept()).start();
        }            
    }

如果我只是在 try 块中检查用户输入,它将等待用户输入,直到用户连接 > 不好,我想将服务器保持在正常循环中,直到输入命令。

在这个简单的例子中是否有任何方法可以做到这一点,或者它是否需要一个额外的线程来监听用户输入,同时仍然循环处理处理程序,如果是这样,我将如何处理?

感谢任何帮助 =)


编辑: 使用不同的线程解决了问题: 首先添加了一个新的类来处理新的线程来监听新的连接:

public class HandleClientsThread extends Thread{

private static int PORT;

public HandleClientsThread(int port) { 
    this.PORT = port;
}

public void run() {
    try {
        System.out.println("Handle Clients Thread Start");
        ServerSocket listener = new ServerSocket(PORT);
        try {
            while (true) {
                new Client(listener.accept()).start();
            }            
        } finally {
            listener.close();        
        }
    } catch(IOException e) { }
}         

}

然后我需要在主服务器中做的就是启动线程并让它在后台运行,同时等待用户输入:

public static void main(String[] args) throws Exception {
    System.out.println("----- Server running on Port " + PORT + " -----");

    new HandleClientsThread(PORT).start();    

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    while(true) {
        String cmd = br.readLine();
        switch (cmd) {

如果有人发现任何问题,例如违反某些编程模式或在这样做时可能发生的坏事,我将不胜感激 =)

【问题讨论】:

    标签: java sockets server


    【解决方案1】:

    另一个线程将是您最易于管理的选择。

    另一种方法是在您希望执行不同的操作时中断处理程序线程,并在完成后恢复/重新启动线程。

    【讨论】:

    • 这应该是评论而不是回答。
    • 我用线程试试运气,因为我无法弄清楚如何在 while 循环中中断处理程序线程而不检查用户输入,这在循环运行时是不可能的。无论如何谢谢=)
    猜你喜欢
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 2017-02-25
    • 2012-06-24
    • 1970-01-01
    • 2014-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多