Java套接字闲置了吗?

Java套接字闲置了吗?,java,websocket,Java,Websocket,这是我第一次使用socket。由于某种原因,在没有任何错误/异常的情况下约20分钟后,套接字不会从服务器接收任何内容。我是在代码中犯了严重错误,还是错过了某种套接字空闲状态?我试着使用基础知识 executorService1.execute(new Runnable() { @Override public void run() { while (true) { System.out.println("

这是我第一次使用socket。由于某种原因,在没有任何错误/异常的情况下约20分钟后,套接字不会从服务器接收任何内容。我是在代码中犯了严重错误,还是错过了某种套接字空闲状态?我试着使用基础知识

executorService1.execute(new Runnable() {

        @Override
        public void run() {

            while (true) {
                System.out.println("Trying");
                String answer = null;

                try {
                    //answer = setInput(s).readLine();
                    input.ready();
                    answer = input.readLine();

                } catch (IOException e) {
                    e.printStackTrace();
                }


                if (answer == null) {
                    System.out.println("Starting to reconnect");
                    checkPrintQueue();

                    try {
                        s = new Socket(serverIpAddress, serverPort);
                        input = new BufferedReader(new InputStreamReader(s.getInputStream()));

                    } catch (IOException e) {
                        e.printStackTrace();
                    }



                } else if (answer.equals("print")) {
                    System.out.println("Printed");
                    checkPrintQueue();
                } else {
                    System.out.println("Testing");
                }
            }

        }

在套接字的生命周期中,您需要使用相同的
BufferedReader
。否则,您可能会丢失数据


注意:当
readLine()
返回null时,必须关闭连接。您正在泄漏套接字。

catch(IOException e){e.printStackTrace();}
-不要这样做,它通常只会隐藏您可能遇到的任何问题,例如您当前遇到的问题。如果您不知道如何处理选中的异常,则将其重新显示为未选中是一个更好的选择。@eis为什么?错误将被打印出来。您不应该做的是捕获并忽略,这里不是这种情况。@Gimby如果同一个套接字已经发生IOException,那么继续使用或重试它是没有意义的。它不会神奇地开始工作。错误可能会打印出来,也可能不会打印出来,这取决于其他情况,但您不应该像什么都没有发生一样继续。定义“不接收任何内容”。接收空值?阻碍?什么是
setInput()
?@eis,但这不是我至少会看到打印出来的东西吗?或者它不会打印任何东西,因为我以前没有遇到过这样的情况。但是在我的例子中,它没有达到创建新BufferedReader的程度,因为它只在一行中进行侦听和等待。但我将使用与您建议的相同的BufferedReader,然而,这真的是问题所在吗?您正在丢失数据。这怎么可能不是问题呢?我之所以使用这种方法,是因为当套接字只有一个BufferedReader时,我陷入了(answer==null)逻辑,例如,当internet连接丢失时。如果我没有赶上你,我真的很抱歉,我对这个话题很陌生。如果你“陷入
(答案==null)
逻辑”中,对等方将关闭连接。创建一个新的
BufferedReader
无法改变这一点。这与“互联网丢失”无关。到底是哪一个?在套接字的生命周期中,您不需要使用相同的
BufferedReader
?你不能丢失数据吗
null
并不意味着流的结束?您不需要在流结束时关闭套接字?他没有漏插座?请解释一下。