0

我正在尝试编写客户端服务器应用程序。客户端发布服务请求,服务器接收它们并将它们显示在技术室中。

一切都很好,直到我尝试将屏幕截图发送到一个特殊的管理员客户端,该客户端应该会收到实时请求列表的屏幕截图。

我的主服务器监听线程如下所示:

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);
    }
}

当客户端将“登录”作为数据发送时,我将他视为 ADMIN CLIENT,并尝试通过 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() 继续读取,因为它刚刚收到来自客户端的新请求,但实际上没有......而不是暂停并等待新请求......

我已经坚持了两个星期了,非常沮丧。

请帮忙。

大卫。

4

1 回答 1

0

在我的情况下,服务器应该启动一个新线程来处理每个接受的连接,而不是在接受线程中处理每一个。但我也尝试通过 serversocket 而不是登录初始化来获得第一次更新。现在,在登录时获得第一次更新后,我在客户端添加了一个服务器套接字,因此它将继续侦听来自服务器的进一步更新。

EJP 的想法给了我第一个线索。

于 2014-02-16T09:55:39.767 回答