我有这个:
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();
我如何关闭和关闭流?