//ssf是通过getSocketFactory()获得的
socket = (SSLSocket) ssf.createSocket(InetAddress.getByName(host), port);
socket.startHandshake();
//这上面应该没什么问题,因为没有抛出异常try {
          Writer out = new OutputStreamWriter(socket.getOutputStream());
          BufferedReader in = new BufferedReader(
              new InputStreamReader(socket.getInputStream()));
          String tmp;
          out.write("POST https://" + host + "/omc/xml HTTP/1.1\r\n");
          out.write(...)
          ...
          //下面就是读取socket值了
          String s = "";
          while (! (tmp = in.readLine()).equals("")) {
          }
           String content = in.readLine();
          ......
    }
 catch (IOException ex1) {
          ex1.printStackTrace();
          return null;
        }
        catch (NullPointerException ex2) {
          ex2.printStackTrace();
          return null;
        }经过运行产生如下异常:
java.net.SocketException: Software caused connection abort: recv failed
        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.read(Unknown Source)
        at com.sun.net.ssl.internal.ssl.InputRecord.readFully(Unknown Source)
        at com.sun.net.ssl.internal.ssl.InputRecord.read(Unknown Source)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(Unknown Source)        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.waitForClose(Unknown Sourc
e)
        at com.sun.net.ssl.internal.ssl.HandshakeOutStream.flush(Unknown Source)捕获的那两个异常也有。这里不贴出来了。
哪位分析一下原因呢?并说说解决的方法。

解决方案 »

  1.   

    http://www.javaeye.com/topic/253123
      

  2.   


    available
    public int available()
                  throws IOException返回此输入流下一个方法调用可以不受阻塞地从此输入流读取(或跳过)的估计字节数。下一个调用可能是同一个线程,也可能是另一个线程。一次读取或跳过此估计数个字节不会受阻塞,但读取或跳过的字节数可能小于该数。 如果已经调用 close() 方法关闭了此输入流,那么此方法的子类实现可以选择抛出 IOException。 

    类 InputStream 的 available 方法总是返回 0。 
    注意最后一句话