0

我有一个播放应用程序连接到 1.2.3.4 的数据库,但出于某种原因播放!(以及其他 Java 应用程序)无法连接到它。

我确实尝试编辑主机文件并为 IP 设置一个名称,app01 1.2.3.4但是它只适用于托管数据库的盒子,它不适用于外部机器。我可以确认在 iptables 中打开了正确的端口,并且我也尝试过重新启动它。

如果我从同一个盒子在 1.2.3.4 的 4567 端口 ping postgres,它就可以工作。但是在我的 java 应用程序中设置相同的 IP 地址失败。怎么了?是权限问题还是 iptables 问题?谢谢。

堆栈跟踪:

Caused by: java.net.NoRouteToHostException: No route to host
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:327)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:193)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:180)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:384)
        at java.net.Socket.connect(Socket.java:546)
        at java.net.Socket.connect(Socket.java:495)
        at java.net.Socket.<init>(Socket.java:392)
        at java.net.Socket.<init>(Socket.java:206)
        at org.postgresql.core.PGStream.<init>(PGStream.java:62)
        at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:76)
        ... 35 more
4

3 回答 3

0

您可以检查数据库服务器上的防火墙设置吗?您可以尝试通过telnet 来检查您是否能够连接。

于 2012-05-16T07:16:23.143 回答
0

您可以通过 pgadmin (http://www.pgadmin.org/) 连接到您的数据库吗?您可以通过给定端口(telnet 1.2.3.4 4567)从您的机器远程登录到数据库服务器吗?如果您无法 telnet,可能是 DB 服务器阻止了您的连接?您是否为 java 或仅为系统的其余部分设置了任何代理服务器?从例外来看,它似乎更像是一个网络问题,而不是 java 的任何问题......

于 2012-05-16T07:16:46.077 回答
0

如果您在路由器后面,您将能够从另一台本地计算机(使用本地 IP)ping 它,但如果您没有正确进行端口转发,您可能无法从外部 ping(您可以从你的路由器)。

要记住的另一件事是,您无法从网络内 ping 您自己的外部 IP,这意味着您可以从 192.168.1.xx(客户端)ping 192.168.1.100(服务器),但您无法 ping来自 192.168.1.xx(客户端)的 72.15.xx.xx(端口转发到 192.168.1.100)。

为了做到这一点,您必须使用外部工具,有很多网站可以为您做到这一点,这是我使用的一个:

http://www.yougetsignal.com/tools/open-ports/

如果它说端口是打开的,那么它是打开的,它现在应该可以工作,如果它显示为关闭,那么你应该仔细检查你的防火墙是否允许数据,也许暂时关闭它以查看它,这就是问题。

如果您需要帮助将端口例外添加到防火墙或从路由器转发端口,请告诉我您正在使用哪个发行版/路由器型号,我会尝试为您挖掘更多信息。

于 2012-05-16T07:36:11.450 回答