jdbc数据库连接失败 java.net.SocketException: Malformed reply from SOCKS

Posted 打杂人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jdbc数据库连接失败 java.net.SocketException: Malformed reply from SOCKS相关的知识,希望对你有一定的参考价值。

jdbc数据库连接失败 Malformed reply from SOCKS server

当IE设置有SOCKS(套接字)代理时,NetBeans Java Desktop Application也就是GUI窗口程序连接数据库总是会失败。如果关闭代理的设置,程序则能正常运行。

程序表现为:长时间处于连接状态而不返回。监视TCP连接,发现程序长时间连接到代理的IP上。大约5分钟后,连接被断开,返回如下异常:
2009-05-05 19:56:13,984 ERROR [101001003] (WorkerThread.java:73) - com.microsoft.sqlserver.jdbc.SQLServerException: 到主机 的 TCP/IP 连接失败。 java.net.SocketException: Malformed reply from SOCKS server

这个问题肯定与IE代理有关,但System.getProperty()对"http.proxyHost"、"htttps.proxyHost"、"socksProxyHost"得到的结果都是null。

于是跟踪DriverManager.getConnection()代码到 class java.net.SocksSocketImpl 的 protected void connect(SocketAddress endpoint, int timeout) 方法中,看到如下调用:
ProxySelector.getDefault();

根据 ProxySelector.getDefault() 和 java 两个关键字google找到一篇资料:


Java Database Connectivity (JDBC) - JDBC Microsoft SQL Problem

得知问题的原因在于 NetBeans Swing Application Framework 的 org.jdesktop.application.Application.create() 调用了
System.setProperty("java.net.useSystemProxies", "true"); 
其中提出了两种解决办法:
public void main(String[] args)
ProxySelector.getDefault();
// code

或者
@Override
protected void startup()
invoke System.setProperty("java.net.useSystemProxies", "false");
// code

其它参考
Java Networking and Proxies

本文出处:http://blog.itpub.net/post/31716/483972

以上是关于jdbc数据库连接失败 java.net.SocketException: Malformed reply from SOCKS的主要内容,如果未能解决你的问题,请参考以下文章

Databricks JDBC 连接有效,但查询失败

为啥我在使用 JDBC 和 MySQL 的 JSP 中出现连接失败错误

Docker Compose 无法从数据库 (jdbc:postgresql://db:5432/postgres) 为用户“postgres”获取连接:连接尝试失败

与 SQL Server 的 JDBC 连接:用户 x 登录失败 [重复]

jdbc数据库连接失败 java.net.SocketException: Malformed reply from SOCKS

皕杰报表:连接数据库失败,请检查数据源配置(oracle.jdbc.driver.OracleDriver)