【问题标题】:Postgres 9.4 - Connection refused - when I connect from a remote PCPostgres 9.4 - 连接被拒绝 - 当我从远程 PC 连接时
【发布时间】:2015-09-16 14:48:06
【问题描述】:

我有一台 PC,我们称之为 PC-A (WIndows 8.1),它运行 Postgres 9.4。我也有一个 java 应用程序,它需要访问数据库, 当我在同一台 PC-A 上运行我的 Java 应用程序时,然后从 localhost 运行,一切正常。

当我在另一台 PC 上运行我的 Java 应用程序时,我们称它为 PC-B (WIndows 8.1),因此它尝试连接到 PC-A 上的数据库,我收到以下错误(我将其翻译成英文,如下意大利语原文):

Postgresql : Connection refused. Check that the hostname and port are correct and that the postmaster is running with option -i, that enables the TCP/IP connections


org.postgresql.util.PSQLException: Connessione rifiutata. Controllare 
che il nome dell'host e la porta siano corretti, e che il server (postmaster) sia in esecuzione con l'opzione -i, che abilita le 
connessioni attraverso la rete TCP/IP.
    at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:122)
    at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:66)
    at org.postgresql.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:125)
    at org.postgresql.jdbc3.AbstractJdbc3Connection.<init>(AbstractJdbc3Connection.java:30)
    at org.postgresql.jdbc3.Jdbc3Connection.<init>(Jdbc3Connection.java:24)
    at org.postgresql.Driver.makeConnection(Driver.java:382)
    at org.postgresql.Driver.connect(Driver.java:260)
    at java.sql.DriverManager.getConnection(DriverManager.java:664)
    at java.sql.DriverManager.getConnection(DriverManager.java:247)
    at Database.Registrar.getconnection(Registrar.java:56)
    at Database.Registrar.readParametersFromTable(Registrar.java:844)
    at Managers.FunctionsAndParameters.writeParametersInMyConfiguration(FunctionsAndParameters.java:405)
Caused by: java.net.ConnectException: Connection timed out: connect
    at java.net.DualStackPlainSocketImpl.connect0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:345)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:589)
    at java.net.Socket.connect(Socket.java:538)
    at java.net.Socket.<init>(Socket.java:434)
    at java.net.Socket.<init>(Socket.java:211)
    at org.postgresql.core.PGStream.<init>(PGStream.java:59)
    at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:77)
    ... 12 more

在网上寻找类似的问题我尝试了一些建议的解决方案,但没有成功:


我编辑了文件“pg_hpa.conf”添加:

host    all    all    192.168.1.0/24    trust    # it should enable all addresses: 192.168.1.*

host    all    all    192.168.1.6/32    trust    # it should enable the address of PC-A

我编辑了文件“pgpostgressql.conf”添加:

listen_addresses = '192.168.1.6'    # it should enable the address of PC-A

listen_addresses = '0.0.0.0'        # it should enable all addresses

它也已经存在了:

listen_addresses = '*'           # it should enable all addresses

我在 PC-B 上的 Java 应用尝试使用以下代码连接到数据库:

String driver = "org.postgresql.Driver";
Class.forName(driver);
connection = DriverManager.getConnection(jdbc:postgresql://192.168.1.6:5432/myDBname, "username" , "password" );

地点:

  • 用户名和密码与我从 localhost 连接时使用的相同(在这种情况下它有效)

  • 192.168.1.6 是 PC-A 的 IP 地址(正在运行 Postgres)

  • 5432 是端口,与我从 localhost 连接时使用的端口相同(在这种情况下它可以工作)

  • myDBname 是数据库名称

当我在本地主机上运行 java 应用程序时,然后在同一台 PC-A 中,我使用相同的代码,而不是“192.168.1.6”,而是“127.0.0.1”


使用 pgAdmin III,我的数据库位于 1 个服务器下:

  • mynameserver (192.168.1.6:5432)

请帮帮我!!!

更新:已解决!!!我禁用了 Windows 防火墙,现在它可以工作了!!!

【问题讨论】:

    标签: java postgresql


    【解决方案1】:

    您可以检查双方的防火墙配置,并尝试从 PC-B ping PC-A 以查看您的两台主机之间是否存在连接问题。

    请注意,“连接被拒绝”与“连接超时”不是同一个问题。

    在 postgresql.conf 中你应该只有一个“listen_addresses”参数,“*”与“0.0.0.0”相同。

    【讨论】:

    • 您好,这里有一些回复:从 PC-A 到 PC-B 的 ping 正常工作。我得到连接被拒绝并且没有“超时”。我删除了“0.0.0.0”并留下了“*”。对不起,我不是那么专家,我应该在防火墙中检查什么?你是说 WINDOWS 防火墙吗?
    • 注意:我在帖子中添加了一些关于 pgAdmin III 的内容...可能有用...提前谢谢你。福斯托
    • 嗨,我发现了问题!我在 pgAdmin III 中创建了一个新服务器,这次使用地址 192.168.1.6 而不是 127.0.0.1 (localhost)。不行...如果您发现我的解决方案有用,请提高我的声誉...我需要它。谢谢
    • 问题未解决!!我之前的评论是一个错误(错觉......)。我仍然有这个问题......
    • 更新:这次真的解决了!!!我禁用了 Windows 防火墙,现在它可以工作了!!!如果您发现我的解决方案有用,请提高我的声誉......我需要它。谢谢你。福斯托
    猜你喜欢
    • 2020-08-08
    • 2021-04-24
    • 1970-01-01
    • 1970-01-01
    • 2018-07-03
    • 2016-11-09
    • 2013-08-02
    • 2015-07-19
    • 2021-04-12
    相关资源
    最近更新 更多