我有一台 PC,我们称它为 PC-A (WIndows 8.1),其中运行 Postgres 9.4。我还有一个 Java 应用程序,它需要访问数据库, 当我在同一台 PC-A 上运行我的 Java 应用程序,然后从本地主机运行时,一切正常。
当我在另一台 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" );
地点:
用户名和密码与我从本地主机连接时使用的相同(在这种情况下有效)
192.168.1.6 是 PC-A(运行 Postgres)的 IP 地址
5432 是端口,与我从本地主机连接时使用的端口相同(在这种情况下它可以工作)
myDBname 是数据库名称
当我在本地主机上运行 java 应用程序时,然后在同一台 PC-A 中,我使用相同的代码,其中不是“192.168.1.6”而是“127.0.0.1”
使用 pgAdmin III,我的数据库在 1 个服务器下:
- 我的名称服务器 (192.168.1.6:5432)
请帮帮我!!!
更新:已解决!!!我禁用了 Windows 防火墙,现在它可以工作了!!!
最佳答案
您可以检查双方的防火墙配置,并尝试从 PC-B ping PC-A 以查看您的两台主机之间是否存在连接问题。
请注意,“连接被拒绝”与“连接超时”不是同一个问题。
并且在 postgresql.conf 中你应该只有一个“listen_addresses”参数,“*”与“0.0.0.0”相同。
关于java - Postgres 9.4 - 连接被拒绝 - 当我从远程 PC 连接时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32611945/