Я пытаюсь написать приложение клиентского сервера. клиенты отправляют запросы на обслуживание и сервер получает их и отображает их в техническом зале.Как я могу узнать, когда сокет простаивает?
все было нормально, пока я не попытался отправить захват экрана специальному клиенту администратора, который должен получить захват экрана из списка живых запросов.
мой основной сервер прослушивания поток выглядит следующим образом:
while (true) {
clientSocket = echoServer.accept();
log.debug("Server Started Listening");
is = new DataInputStream(clientSocket.getInputStream());
os = new PrintStream(clientSocket.getOutputStream());
// An option for a stop listening button. currently not available !
if(listening==true) {
line = is.readUTF();
os.println(line);
System.out.println(line);
RequestReciever.pharseToRequest(line);
}
Метод pharseToRequest выглядит следующим образом:
public static void pharseToRequest(String input) {
List<String> list = new ArrayList<String>(Arrays.asList(input.split(";;;")));
if (list.get(0).equalsIgnoreCase("Login") && list.get(1).equalsIgnoreCase("Login") && list.get(2).equalsIgnoreCase("5"))
{
_adminClients.add(list.get(4));
updateScreenCapture();
AdminClientUpdate tmp = new AdminClientUpdate(list.get(4));
Thread aCU = new Thread (tmp);
aCU.start();
}
else
{
ServerRequest newReq = new ServerRequest(list.get(0), list.get(1), Integer.parseInt(list.get(2)),list.get(3),list.get(4));
addRequest(newReq);
}
}
, когда клиент посылает сообщение "Login" в качестве данных, я рассматривайте его как ADMIN CLIENT и попробуйте отправить его screencapture через поток AdminclientUpdate.
и когда клиент отправил обычные данные, я просто обновляю его на экране сервера методом «addRequest».
проблема у меня есть, когда я пытаюсь отправить захват экрана, он найдет свой путь к клиенту администратора и будет там правильно обновлен, но мой сервер получает ошибку и перестает работать.
Я подозреваю, что это может иметь какое-то отношение к прослушивающему потоку, все еще есть данные в нем из старого запроса, в то время как поток AdminclientUpdate передает данные или что-то в этом роде.
Это ошибка, я получаю от сервера, после отправки скриншота:
java.io.EOFException
at java.io.DataInputStream.readUnsignedShort(Unknown Source)
at java.io.DataInputStream.readUTF(Unknown Source)
at java.io.DataInputStream.readUTF(Unknown Source)
at ListeningThread.run(ListeningThread.java:50)
at java.lang.Thread.run(Unknown Source)
serversocket.accept() continutes чтения как только что получил новый запрос от клиента, когда это действительно не ... вместо паузы и ожидания нового запроса ...
Я застрял с этим в течение двух недель и очень расстроен.
, пожалуйста, ПОМОЩЬ.
David.
Ваш сервер должен начать новый поток, чтобы обрабатывать каждое принятое соединение, вместо обработки каждого из них в строке в потоке accept. – EJP
Мне удалось решить некоторые проблемы, сделав это. все работает нормально при первом входе в систему. теперь я ищу способ инициализации обновлений ** с сервера **, когда есть изменение, клиенту. нужно ли мне добавить серверский сервер на клиент для этого? или есть ли другие, более элегантные способы сделать это? –