Я только начал изучать Java. Моя задача — создать файловый сервер, который принимает определенные команды, такие как File Get, File Put и File Delete от нескольких клиентов с использованием Threading. Я использую пользовательский класс DataObject для сериализации и отправки команд и любых данных, которые могут сопровождать его. Клиент должен быть интерактивным в том смысле, что он предполагает ручной ввод пользователем различных команд. Это означает, что функция ObjectInputStream readObject() не будет работать в цикле while(true) из-за исключения EOFException. Что я могу сделать, чтобы серверный поток приостанавливался в readObject() до тех пор, пока не увидит следующий объект, а затем возобновлял цикл while(true)?
Код на сервере (запускается для каждого потока отдельно):
public void run() {
ObjectInputStream is = null;
ObjectOutputStream os = null;
try{
is = new ObjectInputStream(clientSocket.getInputStream());
os = new ObjectOutputStream(clientSocket.getOutputStream());
while (true) {
input = (DataObject) is.readObject();
//System.out.println("Input has been read");
output = CommandProcessor.process(input);
if(output.data == null) {
os.writeObject(output);
if(output.message.compareToIgnoreCase("Rsp Bye")==0){
clientSocket.close();
}
}
}
}
Код на клиенте:
public Talker() {
DataObject input = new DataObject(0), output = new DataObject(0);
try {
log = new PrintStream("/home/meher/log.txt");
InetAddress serverAddress = InetAddress.getByName("127.0.0.1");
Socket serverSocket = new Socket(serverAddress, port);
os = new ObjectOutputStream(serverSocket.getOutputStream());
is = new ObjectInputStream(serverSocket.getInputStream());
CommandExecuter.Hello(output);
write(output);
read(input);
while(not-end-of-user-input){ //Yet to code this part
//Execute commands
}
}