Java套接字的输入问题

Java套接字的输入问题,java,sockets,Java,Sockets,我尝试在这里做一个编程练习,使客户机和服务器使用套接字。对于它们之间的通信,我使用PrintWriter和InputReader。我遇到的问题是:在客户机等待输入时,如何检查服务器是否正在尝试向客户机发送内容?此时,客户机循环如下所示: do { outToServer.println(inFromUser.readLine()); String fromServer=inFromServer.readLine();

我尝试在这里做一个编程练习,使客户机和服务器使用套接字。对于它们之间的通信,我使用PrintWriter和InputReader。我遇到的问题是:在客户机等待输入时,如何检查服务器是否正在尝试向客户机发送内容?此时,客户机循环如下所示:

do {
                outToServer.println(inFromUser.readLine());
                String fromServer=inFromServer.readLine();
                if(fromServer.equals("OK")){
                    clientSocket.close();
                }else{
                    System.out.println(fromServer);
                }
            } while (!clientSocket.isClosed());

问题是,在某些情况下,服务器需要打印多行,然后才需要再次输入。相反,它会打印一行,然后我必须键入一些内容,然后再打印另一行,以此类推。有办法解决这个问题吗?谢谢。

所以您需要封装

outToServer.readLine();
在while循环中,该循环具有类似于hasNext函数的布尔条件。您可能需要按如下方式进行设置:

String x = outToServer.readLine();
//while x doesn't equal whatever readLine would return if there's nothing to read
//I'm not sure if this is a null String or not
while(x!=null){
    System.out.print(x);//print it however you wish
    String x = outToServer.readLine();
}

然后在需要时对InforomServer执行类似操作。

您想创建什么?您的目标是创建聊天应用程序吗?不,这只是一个简单的练习,您可以向服务器发送命令并执行操作。请告诉我这是否有帮助。如果您使用的是BufferedReader,则流的结尾返回空字符串,因此上述条件应该是正确的。问题仍然存在,因为当我调用readLine时,程序会一直等到我写东西。我试图用。ready解决这个问题。如果我写了什么东西,它应该返回true。或者这是我理解的,但它不起作用。所以当你调用readLine时,程序会一直等到你写东西?这是由于您的代码还是您正在使用的特定类别的读取器造成的?您具体使用哪一类的阅读器?BufferedReader?是>BufferedReader INFOROMUSER=新BufferedReadernew InputStreamReaderSystem.in;我读到它在调用.readLine时等待输入。