gpt4 book ai didi

java - 我的程序想要继续从命令行获取输入

转载 作者:行者123 更新时间:2023-12-01 05:06:19 24 4
gpt4 key购买 nike

我正在尝试为我的聊天程序创建一个服务器,但由于某种原因,它只接受输入,并且即使您一遍又一遍地按 Enter 键,它也会继续执行此操作。我试图仅在命令行中运行服务器,因此这使得无法向服务器提供一些命令。有谁知道为什么这样做?

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Iterator;


public class Server {

ArrayList<PrintWriter> clientOutputStreams;
int port;
ServerSocket serverSocket;

public class ClientHandler implements Runnable {
BufferedReader reader;
Socket socket;

public ClientHandler(Socket clientSocket) {
try {
socket = clientSocket;
InputStreamReader isReader = new InputStreamReader(socket.getInputStream());
reader = new BufferedReader(isReader);
} catch (Exception ex) {
ex.printStackTrace();
}
}

@Override
public void run() {
String message;
try {
while ((message = reader.readLine()) != null) {
tellEveryone(message);
System.out.println(message);
}
} catch (Exception ex) {
ex.printStackTrace();
}

}

}

public static void main(String args[]) {
new Server().go();

}

public void createSocket() {
try {
port = 31996;
serverSocket = new ServerSocket(port);
} catch (Exception e) {
System.out.println("The port is in use or does not exist! Please pick an unused port between 1025 and 65535.");
createSocket();
}
}

public void go() {

clientOutputStreams = new ArrayList<PrintWriter>();

try {
createSocket();
while (true) {
Socket clientSocket = serverSocket.accept();
PrintWriter writer = new PrintWriter(
clientSocket.getOutputStream());
clientOutputStreams.add(writer);

Thread t = new Thread(new ClientHandler(clientSocket));
t.start();
System.out.println("Server started on port " + port+ ".");
}
} catch (Exception ex) {
ex.printStackTrace();
}

}

public void tellEveryone(String message) {

Iterator<PrintWriter> it = clientOutputStreams.iterator();
while (it.hasNext()) {
try {
PrintWriter writer = (PrintWriter) it.next();
writer.println(message);
writer.flush();

} catch (Exception ex) {
ex.printStackTrace();
}
}

}

}

最佳答案

我想这个条件while ((message = reader.readLine()) != null)永远不会被满足。

您需要发送某种“终止”消息或让客户端关闭连接。

关于java - 我的程序想要继续从命令行获取输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12613342/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com