在SSLSocket中关闭BufferedReader.readLine()?

时间:2011-12-07 08:09:20

标签: java ssl

我有这个:

        while(SD.SessionAlive)
        {
            timer = new Timer();
            timer.schedule(new TimerTask() {
                public void run() {
                    try
                    {
                        SD.closeSession();
                    }
                    catch(Exception e)
                    {
                    }
                }
                }, timeToRun);
            String InputData = SD.ClientSocketReader.readLine();
            timer.cancel();
            if(InputData!=null)
            {
                commandHandler(InputData);
            }
        }

在这种情况下,我需要从BufferedReader监听输入数据。 如果客户不发送任何内容,30秒后,会话必须关闭。

当我不使用SSL连接时,我使用shutdownInput和shutdownOutput关闭会话。 但是当我使用SSL连接时,我可以使用shutdownInput和shutdownOutput:“SSLSocket中不支持shutdownInput()方法”。 当我使用BufferedReader.close()时,会话等待关闭....

Name: smie
State: RUNNABLE
Total blocked: 0  Total waited: 0

Stack trace: 
java.net.SocketInputStream.socketRead0(Native Method)
java.net.SocketInputStream.read(SocketInputStream.java:129)
com.sun.net.ssl.internal.ssl.InputRecord.readFully(InputRecord.java:293)
com.sun.net.ssl.internal.ssl.InputRecord.read(InputRecord.java:331)
com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:798)
   - locked java.lang.Object@37f8d244
com.sun.net.ssl.internal.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:755)
com.sun.net.ssl.internal.ssl.AppInputStream.read(AppInputStream.java:75)
   - locked com.sun.net.ssl.internal.ssl.AppInputStream@30b48b11
sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)
sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)
sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
   - locked java.io.InputStreamReader@2fa6a1a7
java.io.InputStreamReader.read(InputStreamReader.java:167)
java.io.BufferedReader.fill(BufferedReader.java:136)
java.io.BufferedReader.readLine(BufferedReader.java:299)
   - locked java.io.InputStreamReader@2fa6a1a7
java.io.BufferedReader.readLine(BufferedReader.java:362)
org.smie.ftpex.SessionHandler.run(SessionHandler.java:71)

其中SessionHandler.java:71是:

String InputData = SD.ClientSocketReader.readLine();

我如何关闭和关闭流?

0 个答案:

没有答案