java.net.ConnectException

时间:2012-12-05 09:12:50

标签: java mysql

我看过很少关于这个话题的线索,但我仍然无法弄清楚出了什么问题。以下是代码:

import java.sql.*;

public class SQL
{
    public static void main(String[] args) 
    {
        Connection conn = null;
        String url = "jdbc:mysql://mysql1.oyo.co.il:3306/";
        String dbName = "sdarot2_winner";
        String driver = "com.mysql.jdbc.Driver";
        String userName = ""; 
        String password = "";
        String table = "LEADER_CAM_PRODUCTS";

        try {
            Class.forName(driver).newInstance();
            conn = DriverManager.getConnection(url+dbName,userName,password);
            System.out.println("Connected to the database");
            conn.close();
            System.out.println("Disconnected from database");

        }catch (Exception e) {
            System.out.println(e);
        }
  }
}

这是我得到的错误:

  

com.mysql.jdbc.CommunicationsException:由于基础>而导致通信链接失败>例外:

     

**开始没有异常**

     

java.net.ConnectException   消息:连接超时:连接

     

堆栈跟踪:

     

java.net.ConnectException:连接超时:连接     at java.net.PlainSocketImpl.socketConnect(Native Method)     在java.net.PlainSocketImpl.doConnect(未知来源)     at java.net.PlainSocketImpl.connectToAddress(Unknown Source)     在java.net.PlainSocketImpl.connect(未知来源)     在java.net.SocksSocketImpl.connect(未知来源)     在java.net.Socket.connect(未知来源)     在java.net.Socket.connect(未知来源)     在java.net.Socket。(未知来源)     在java.net.Socket。(未知来源)     在com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:256)     在com.mysql.jdbc.MysqlIO。(MysqlIO.java:271)     在com.mysql.jdbc.Connection.createNewIO(Connection.java:2744)     在com.mysql.jdbc.Connection。(Connection.java:1553)     在com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)     at java.sql.DriverManager.getConnection(Unknown Source)     at java.sql.DriverManager.getConnection(Unknown Source)     在SQL.main(SQL.java:17)

     

**结束了例外**

     

发送到服务器的最后一个数据包是1毫秒前。

以下是我发现的一些事情:

  1. I.P /域或端口不正确
  2. I.P /域或端口(即服务)已关闭
  3. I.P /域的响应时间超过默认超时时间
  4. 您的防火墙阻止您正在使用的任何端口上的请求或响应
  5. 您的防火墙阻止了对该特定主机的请求
  6. 您的互联网访问已关闭
  7. a)这是对的。 b)因为我的网站现在正在使用该数据库,所以它没有下降。 c)我怎么检查?我不认为这是问题,因为我说我在这个数据库上有一个正在运行的网站。 d)现在的方式,因为我上面提到的相同的原因。 e)与d

    相同

    那么我做错了什么?为什么PHP代码可以使用sql但java给我错误? 谢谢。

2 个答案:

答案 0 :(得分:3)

作为实验,尝试使用系统的telnet命令连接到mysql1.oyo.co.il上的端口3306。或者打开原始TCP / IP连接的其他一些实用程序(例如ncnetcat)。 根据您的OS /发行版,您可能需要找到并安装合适的命令来帮助您解决此问题。观察发生的情况。


重新诊断:

  

a)这是正确的。

如果你这么说......

  

b)因为我的网站现在正在使用该数据库,所以它没有下降。

充其量你已经证明主机正在工作。端口80上的Web服务和端口3306上的MySQL服务是不同的服务。 (事实上​​,mysql1.oyo.co.il可能正在做巧妙的数据包路由技巧,以便不同端口上的流量被传输路由到不同的主机或虚拟主机。)

  

c)我该怎么检查?

尝试更改/增加超时。

  

我不认为这是问题,因为我说我在这个数据库上有一个正在运行的网站。

我猜这不是一个超时问题...但正如我上面所说,你有一个网站的事实说没有关于MySQL服务是否正在运行。

  

d)现在因为我上面提到的原因。

你只是证明你可以到达80号港口......见上文

  

e)与d

相同

你只是证明你可以到达80号港口......见上文


基于以上所述,这似乎是合理的:

  • 您有本地防火墙问题,
  • 该端口上的MySQL服务当前未运行,
  • 服务端的网络路由在该端口上的流量中断,
  • MySQL服务已永久关闭,或
  • 服务的防火墙已配置为不接受来自随机(或特定)地点的网络连接,包括您的。

您看到超时而不是“拒绝连接”这一事实表明,与MySQL服务端点本身的问题相比,这更可能是网络或防火墙问题。

我的猜测是“他们”已撤回服务......并且您不应该再使用它了。 (提供公共MySQL数据库服务让我觉得奇怪的事情......以及从安全和管理的角度来看是有问题的。)

答案 1 :(得分:1)

'连接超时'表示:

  • 故意忽略连接请求的服务器端防火墙
  • 网络拓扑问题,使得IP数据包无法通过
  • 服务器主机本身已关闭。

很可能是第一个。

请注意,与此处的其他答案相反, 表示服务器程序已关闭,或客户端出现本地防火墙问题。前者会导致“拒绝连接”,后者会根据您的平台给您一些“拒绝许可”的内容。