У меня есть клиент-серверное приложение, которое я создаю, и у меня возникают проблемы при чтении объектов на сервере.
После того, как мой сервер подключился к клиентскому сокету, я строю потоки ввода и вывода объектов и передаю их моему методу service()
. Там я должен обрабатывать различные виды сообщений от клиента. Я могу получить сообщение от клиента (то есть объект Message
моего дизайна) просто отлично. Но, конечно, я хочу сделать цикл, чтобы я мог получить сообщение, обработать его и ответить обратно.
Пока мой код работает только для одного сообщения. Когда я добавлял свой цикл, то, что происходило на каждой итерации, мой сервер просто продолжал читать одно и то же сообщение снова и снова, прежде чем у моего клиента появилась возможность отправить новое сообщение через сокет (по крайней мере, я так думаю) .
Так что мне действительно нужно выяснить, как заставить мой service()
метод ожидать нового ввода. Есть идеи? Или я подхожу к этому неправильно? Нужно ли создавать новую OIS на каждой итерации или ...? Какой-то код:
public void service(ObjectInputStream input, ObjectOutputStream output) throws IOException, Exception {
_shouldService = true;
while (_shouldService) {
// It just keeps reading the same message over and over
// I need it to wait here until the client sends a new message
// Unless I'm just approaching this all wrong!
NetworkMessage message = (NetworkMessage) input.readObject();
NetworkMessageHeader header = message.getHeader();
String headerType = header.getType();
if (headerType.equals(NetworkMessageHeader.NetworkMessageHeaderTypeConnect)) {
doLoginForMessage(message, output);
} else if (headerType.equals(NetworkMessageHeader.NetworkMessageHeaderTypeFiles)) {
doFilesList(message, output);
} else {
System.out.println("Unrecognized header type: " + headerType);
}
}
}