【问题标题】:java tcp connection with public i.p与公共 IP 的 java tcp 连接
【发布时间】:2012-01-12 08:04:22
【问题描述】:

我正在尝试通过使用其公共 ip 以 tcp 连接到 java 中的服务器计算机。但是当我运行客户端应用程序时,我不断收到连接被拒绝错误。如果我使用 localhost 而不是公共 ip,它可以完美运行。

我在互联网上搜索问题的几个原因,但我无法解决它。

我在路由器设置中将该端口转发到我机器的本地 IP 地址(192.168.1.3)。然后我在使用 netstat -an 运行服务器应用程序时检查端口是否正在侦听。我看到像这样的线条, 0.0.0.0:19999 或 []:19999 。 19999 是我要监听的端口号。然后我将我的ServerSocket构造函数更改为3参数一,它也绑定了本地地址。

InetAddress miad = InetAddress.getByAddress(addr);
ServerSocket socket1 = new ServerSocket(port,10,miad);

addr 是我的机器本地 IP 的 InetAddress。经过这些修改后,当我启动服务器应用程序时,我运行 netstat 并显示:

TCP   192.168.1.3:19999    0.0.0.0 LISTENING

我认为我的服务器正在侦听正确指定的端口。

我还禁用了我的防火墙和防病毒软件。

我在网上看到了几个关于这个问题的线程和讨论,并尝试了那里提到的大部分东西,但我一直收到连接被拒绝的错误。

我做错了什么?当我使用 localhost 进行测试时,它运行没有任何错误。

【问题讨论】:

  • 添加SSCCE 以更快地获得帮助。
  • 您是使用公共 IP 从您自己的本地网络连接到服务器,还是从 Internet 上的其他地方连接? (前者不适用于很多路由器/调制解调器)
  • 其实我是在同一台机器上做的。是这个问题吗?
  • 顺便说一句 System.out.println(miad); 的结果是什么?
  • 你能telnet 192.168.1.3 19999 吗?

标签: java tcp port


【解决方案1】:

这是因为路由器(不是很确定,但差不多)。尝试查看像 www.canyouseeme.org 这样的网络服务是否可以连接到您的服务器。

主要思想是内部机器(局域网内)无法使用外部(公共)IP地址连接到同一局域网内的机器。

我很确定它会工作,使用你的内部 ip (192.168.1.3)。

如果您确定您正确转发了端口,CanYouSeeMe 会说您的服务器是可访问的。如果没有,请确保您的 ISP 没有出于某种“安全原因”阻止端口。

【讨论】:

  • 是的,这就是问题所在。我试图在不同的网络上运行客户端并且它有效。非常感谢。但是我的程序需要以两种方式运行。所以也许我可以尝试访问局域网中的服务器,如果它不成功,那么尝试连接公共 IP。这会是一个合适的解决方案吗?
【解决方案2】:

要弄清楚您的问题是否与 Java 和编程有关,请这样做

telnet 192.168.1.3 19999

如果无法连接,那么 superuser.com 将是讨论此问题的更好场所。

【讨论】:

    猜你喜欢
    • 2017-10-07
    • 1970-01-01
    • 2016-04-24
    • 1970-01-01
    • 2011-08-08
    • 2012-04-12
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多