我有一个播放应用程序连接到1.2.3.4的数据库,但由于某种原因Play! (以及其他Java应用程序也无法连接到它。
我确实尝试编辑主机文件并为app01 1.2.3.4
设置IP名称,但它只能在托管数据库的框中工作,而且不适用于外部计算机。我可以确认在iptables中打开了正确的端口,我也尝试重新启动它。
如果我在同一个方框中在端口4567(1.2.3.4)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
答案 0 :(得分:0)
您可以检查数据库服务器上的防火墙设置吗?您可以通过telnet尝试检查您是否能够连接。
答案 1 :(得分:0)
您可以通过pgadmin(http://www.pgadmin.org/)连接到您的数据库吗? 你能从你的机器telnet到给定端口上的数据库服务器(telnet 1.2.3.4 4567)吗? 如果你不能telnet可能数据库服务器阻止你的连接? 您是否仅为java设置了代理服务器,或仅为系统的其余部分设置了代理服务器? 从例外情况看,它似乎比使用java的任何东西都更具网络性......
答案 2 :(得分:0)
如果您在路由器后面,您可以从另一台本地计算机(在本地IP中使用)ping它,但如果您没有正确进行端口转发,则可能无法从外部ping通(您可以从你的路由器配置。)
要记住的另一件事是,您无法从网络中ping您自己的外部IP,这意味着您可以从192.168.1.xx(客户端)ping 192.168.1.100(服务器),但您可以从192.168.1.xx(客户端)ping 72.15.xx.xx(端口转发到192.168.1.100)。
为了做到这一点,你必须使用一个外部工具,有很多网可以为你做这个,这是我使用的那个:
http://www.yougetsignal.com/tools/open-ports/
如果它说端口是打开的,那么它是打开的,现在它应该可以正常工作,如果它显示已关闭,那么你应该仔细检查你的防火墙是否允许数据,也可以暂时关闭它以查看问题。< / p>
如果您需要帮助向防火墙添加端口例外或从路由器转发端口,请告诉我您正在使用哪个发行版/路由器模型,我会尝试为您挖掘更多信息。