【问题标题】:Java apps can't connect to IP, but I can ping itJava 应用程序无法连接到 IP,但我可以 ping 它
【发布时间】:2012-05-16 07:11:29
【问题描述】:

我有一个游戏应用程序连接到 1.2.3.4 的数据库,但出于某种原因 Play! (以及其他 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

【问题讨论】:

  • 你真的有IP 1.2.3.4吗?你电脑的IP是多少??我认为,错误消息说everythink...您不在同一个子网中,例如 1.2.3.4 ip
  • 哈哈,实际上是 72.15.xxx.xx 我不想在这里发布真实 IP :)
  • 写一些你自己写的代码。
  • 这是内置的 Play! JDBC Postgres 驱动程序和 RubyRep Postgres 驱动程序,不是我的代码 :)

标签: java ping hosts-file


【解决方案1】:

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

【讨论】:

  • 好的,谢谢你提醒我 PGA :) 它肯定有助于调试。问题绝对与网络有关。所以不知何故,iptables 文件被覆盖,端口被删除。应该是升级了我调试它并修复。谢谢!
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

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

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

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

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

    【讨论】:

    • 看起来我花了太多时间才添加这个回复:P 很高兴你修复了它,伙计!
    猜你喜欢
    • 1970-01-01
    • 2016-12-15
    • 2019-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-28
    相关资源
    最近更新 更多