HTTPClient-java.net.SocketException:未实现未连接的套接字抛出

Posted

技术标签:

【中文标题】HTTPClient-java.net.SocketException:未实现未连接的套接字抛出【英文标题】:HTTPClient-java.net.SocketException: Unconnected sockets not implemented thrown 【发布时间】:2009-11-15 22:19:02 【问题描述】:

我正在使用 HTTPClient 4.0 连接远程服务器并使用 HTTPS 传输文件。 当我尝试连接时,出现异常“java.net.SocketException:未实现未连接的套接字”。 请查看堆栈跟踪

java.net.SocketException: Unconnected sockets not implemented 
at java.lang.Throwable.<init>(Throwable.java:196) 
at java.lang.Exception.<init>(Exception.java:41) 
at java.io.IOException.<init>(IOException.java:40) 
at java.net.SocketException.<init>(SocketException.java:29) 
at javax.net.SocketFactory.createSocket(SocketFactory.java:2) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:585) 
at org.apache.commons.httpclient.protocol.ReflectionSocketFactory.createSocket(Unknown Source) 
at org.apache.commons.httpclient.protocol.SSLProtocolSocketFactory.createSocket(Unknown Source) 
at org.apache.commons.httpclient.HttpConnection.open(Unknown Source) 
at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(Unknown Source) 
at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(Unknown Source) 
at org.apache.commons.httpclient.HttpClient.executeMethod(Unknown Source) 
at org.apache.commons.httpclient.HttpClient.executeMethod(Unknown Source) 
at co.com.personalsoft.ftpseguro.utilidades.TransmisionHTTP.ejecutarTransmisionHTTP(TransmisionHTTP.java:107) 
at co.com.personalsoft.ftpseguro.utilidades.TransmisionFTPNew.ejecutarTransmisionAuto(TransmisionFTPNew.java:483) 
at co.com.personalsoft.ftpseguro.utilidades.TransmisionFTPNew.ejecutarTransmision(TransmisionFTPNew.java:1016) 
at co.com.personalsoft.ftpautomatico.ConexionThread.run(ConexionThread.java:58) 
at java.lang.Thread.run(Thread.java:595) 

使用 HTTP Client 3.1 时发现相同的错误。

我的环境 应用服务器:Websphere 应用服务器 6.1.0.23 Java : JDK 1.5.0.16

【问题讨论】:

它在 websphere 之外工作吗?也许 websphere 取代了套接字工厂? 这在 websphere 应用服务器 5.1 中工作该错误仅在 WAS 6.1 中发现 我在 RAD 7.0 和 WAS 6.1 测试环境下看到了这一点。当我使用最新的 JDK 启动它时,完全相同的代码可以工作,但是在 WAS 6.1 测试环境中使用的任何版本都失败了。好像和具体的JDK版本有关:old.nabble.com/…和***.com/questions/116635/… 【参考方案1】:

其实比灭火更完整的答案是

    将 com.ibm.ws.admin.client_7.0.0.jar 添加到 java build

    这解决了java.lang.NoClassDefFoundError: com.ibm.ffdc.Manager error

    添加到设置:

    import java.security.Security;
    ...
    Security.setProperty("ssl.SocketFactory.provider", "com.ibm.jsse2.SSLSocketFactoryImpl");
    

    这解决了Cannot find the specified class com.ibm.websphere.ssl.protocol.SSLSocketFactory

【讨论】:

【参考方案2】:

当我启用 javax.net.debug 时,我注意到缺少一个类 com.ibm.websphere.com.ibm.websphere.ssl.protocol.SSLSocketFactory。

我在调用 httpclient 的单元测试中遇到了问题。我最终做的是将此行添加到我的 TestClass.setUp()

Security.setProperty("ssl.SocketFactory.provider", "com.ibm.jsse2.SSLSocketFactoryImpl");

【讨论】:

以上是关于HTTPClient-java.net.SocketException:未实现未连接的套接字抛出的主要内容,如果未能解决你的问题,请参考以下文章