`
aerchi
  • 浏览: 422342 次
  • 性别: Icon_minigender_1
  • 来自: 昆明
文章分类
社区版块
存档分类
最新评论

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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics