/////////////////////////////////////////////////////////////////////////////
java.net.SocketException: Software caused connection abort: recv failed
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at com.sun.net.ssl.internal.ssl.InputRecord.readFully(InputRecord.java:284)
at com.sun.net.ssl.internal.ssl.InputRecord.read(InputRecord.java:319)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:720)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.waitForClose(SSLSocketImpl.java:1345)
at com.sun.net.ssl.internal.ssl.HandshakeOutStream.flush(HandshakeOutStream.java:103)
at com.sun.net.ssl.internal.ssl.Handshaker.sendChangeCipherSpec(Handshaker.java:590)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.sendChangeCipherAndFinish(ClientHandshaker.java:697)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverHelloDone(ClientHandshaker.java:623)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:160)
at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:495)
at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:433)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:815)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1025)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:619)
at com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:59)
at sun.nio.cs.StreamEncoder$CharsetSE.writeBytes(StreamEncoder.java:336)
at sun.nio.cs.StreamEncoder$CharsetSE.implFlushBuffer(StreamEncoder.java:404)
at sun.nio.cs.StreamEncoder$CharsetSE.implFlush(StreamEncoder.java:408)
at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:152)
at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:213)
at java.io.BufferedWriter.flush(BufferedWriter.java:236)
at Test.main(Test.java:44)
/////////////////////////////////////////////////////////////////////////////////////

解决方案 »

  1.   

    代码如下:
    ///////////////////////////////////////////////////////////////////////////////////
    import java.net.*;
    import java.io.*;
    import java.security.*;
    import java.io.PrintWriter;//import javax.microedition.io.HttpsConnection;
    import javax.net.ssl.*;
    import com.sun.net.ssl.X509TrustManager;
    import com.sun.net.ssl.SSLContext;
    import com.sun.net.ssl.TrustManager;
    import javax.net.*;
    import java.io.IOException;
    import java.security.cert.*;   
    import java.security.KeyManagementException;
    import java.security.NoSuchAlgorithmException;
    public class Test { public static void main(String args[])
    {
    try{



      // Get a Socket factory 
         // SocketFactory factory = SSLSocketFactory.getDefault(); 
    X509TrustManager   xtm   =   new   MyTrustManager();   
    TrustManager   mytm[]   =   {xtm};   
    SSLContext   ctx   =   SSLContext.getInstance("SSL");   
    ctx.init(null,mytm,   null);   
    SSLSocketFactory   factory   =   ctx.getSocketFactory();   



          // Get Socket from factory 
          Socket socket = factory.createSocket("www.sun.com", 443); 
           
          BufferedWriter out = new BufferedWriter(new 
           OutputStreamWriter(socket.getOutputStream()));
          BufferedReader in = new BufferedReader(
    new InputStreamReader(socket.getInputStream()));
          out.write("GET / HTTP/1.0\n\n");
          out.flush();       String line;
          StringBuffer sb = new StringBuffer();
          while((line = in.readLine()) != null) {
             sb.append(line);
             System.out.println(line);
          }
          out.close();
          in.close();
          System.out.println(sb.toString()); }catch(IOException e1)
    {
    e1.printStackTrace();
    }catch(KeyManagementException e2)
    {
    e2.printStackTrace();
    }catch(NoSuchAlgorithmException e3)
    {
    e3.printStackTrace();
    }

    }

    }class   MyTrustManager   implements   X509TrustManager   //解决问题的关键!!!   
    {   
          MyTrustManager()   
          {   //   constructor   
                //   create/load   keystore   
          }   
      
          public   void   checkClientTrusted(X509Certificate   chain[],   String   authType)   throws   CertificateException   
          {   
                System.out.println("1");   
          }   
      
          public   void   checkServerTrusted(X509Certificate   chain[],   String   authType)   throws   CertificateException     
          {   
                     System.out.println("2");               
        //   special   handling   such   as   poping   dialog   boxes   
          }     
          public   X509Certificate[]   getAcceptedIssuers()   
          {   
                 System.out.println("3");   
                 return   null;   
          }   
          
          public boolean isClientTrusted(X509Certificate   chain[])
          {
           return true;
          }
          
          public boolean isServerTrusted(X509Certificate   chain[])
          {
           return true;
          }
          }////////////////////////////////////////////////////////////////////////////////
    谁连接过的给个意见