【发布时间】: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) {
如果有人发现任何问题,例如违反某些编程模式或在这样做时可能发生的坏事,我将不胜感激 =)
【问题讨论】: