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