Java 如何知道套接字何时空闲?

Java 如何知道套接字何时空闲?,java,multithreading,sockets,inputstream,eofexception,Java,Multithreading,Sockets,Inputstream,Eofexception,我正在尝试编写一个客户机-服务器应用程序。 客户端发布服务请求,服务器接收并在技术室中显示 一切都很好,直到我尝试向一个特殊的管理客户端发送一个屏幕截图,该客户端应该会收到一个实时请求列表的屏幕截图 我的主服务器侦听线程如下所示: pharseToRequest方法如下所示: 刚刚从客户端收到新请求时,serversocket.accept继续读取, 当它真的没有。。。 而不是暂停和等待一个新的请求 我被这件事困扰了两个星期,非常沮丧 请帮忙 David。在我的例子中,服务器应该启动一个新线程来

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

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

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

pharseToRequest方法如下所示:

刚刚从客户端收到新请求时,serversocket.accept继续读取, 当它真的没有。。。 而不是暂停和等待一个新的请求

我被这件事困扰了两个星期,非常沮丧

请帮忙


David。

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


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

您的服务器应该启动一个新线程来处理每个已接受的连接,而不是在接受线程中在线处理每个连接。我已经通过这样做解决了一些问题。在第一次客户端登录时一切正常。现在,我正在寻找一种方法来初始化从服务器到客户端的更新(当发生更改时)。我是否也必须在客户机上添加serversocket才能这样做?或者还有其他更优雅的方式吗?
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);
}
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);
    }
}
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)