java - 尝试连接外部 IP 时连接被拒绝

标签 java networking

我一直在做一个小的服务器/客户端项目,我遇到了一个阻碍我进步的小问题。

我想我已经掌握了程序(客户端和服务器)的核心,并且我设法使用 localhost 连接了两者,但是当我尝试通过我的外部 IP 连接时,我得到一个异常:

java.net.ConnectException: Connection refused
java.net.PlainSocketImpl.socketConnect(Native Method)
java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
java.net.SocksSocketImpl.connect(SocksSocketImpl.java:432)
java.net.Socket.connect(Socket.java:529)
java.net.Socket.connect(Socket.java:478)
java.net.Socket.<init>(Socket.java:375)
java.net.Socket.<init>(Socket.java:218)
networking.Client.run(Client.java:183)
java.lang.Thread.run(Thread.java:680)

最初我尝试使用端口 10,但发现 0 到 1023 之间的端口出于某种原因在 Mac 上不起作用,所以我选择了该范围之外的端口。连接 localhost 有效,但是当我尝试连接我的外部 IP 时(就像普通用户一样),我得到了那个异常。我的端口已正确转发并运行 sudo lsof -i tcp -nP(Mac 为 netstat)将显示实际上我的服务器正在监听正确的端口。这让我相信问题可能出在我的客户身上,但我真的不知道。

这是 Terminal.app 的 sudo lsof -i tcp -nP 输出:

COMMAND     PID         USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
java      35423 MeshulamSilk   41u  IPv6 0xc949f3cdb29dfdcd      0t0  TCP *:63370 (LISTEN)
java      35423 MeshulamSilk   42u  IPv6 0xc949f3cdbbf1b96d      0t0  TCP [::1]:63992->[::1]:63991 (TIME_WAIT)

我知道这些帖子有点乱,所以我将代码上传到 Gist。如果有人希望我在这里添加它,请告诉我,我会的。

The code for both the server and client can be found here .

一些注意事项:

  • MooConsole 是我编写的一个库,它为导出的程序提供了一个控制台。我在我的客户端和服务器中都使用它来显示文本。
  • MooCommands 是我的另一个库,它表示您可以从控制台运行的命令。
  • SocketThread 是一个处理新连接的类。这使得服务器可以同时连接多个客户端。它扩展了 java.lang.Thread。我不认为这是导致问题的原因,所以我没有包括它,但如果有必要,我可以。
  • Operations.DISCONNECT 是一个枚举常量,表示断开连接。

如果有人知道我做错了什么或者我做的不够好,请告诉我,我将不胜感激。

最佳答案

我不是 Mac 方面的专家,但根据 lsof 的输出,您的程序似乎绑定(bind)到仅 IPv6 地址。它在本地主机上运行良好,但如果您尝试公共(public) IP 地址(并​​使用 IPv4),它可能是问题的根源。至于端口号,在 UNIX 之类的操作系统上,您需要对 1024 以下的用户端口具有 root 访问权限。无论如何,您应该尝试在 Mac 上禁用 IPv6,看看问题是否仍然存在。

关于java - 尝试连接外部 IP 时连接被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16290903/

相关文章:

java - JNI 使用。 "symbol lookup error"

r - R Shiny/RStudio + KML map 网络

Javafx (openjfx-11) 在 Netbeans 11 中不起作用。我该怎么办?

java - 当组件失效或重绘被触发时收到通知

java - 控制 HTML JLabel 的重新验证

networking - 链接TCP应用程序和UDP应用程序

java - 网络编程中有哪些类型的套接字或方法来创建 VoIP 或在线游戏

linux - UDP 吞吐量 : Decreasing InterruptThrottleRate in ethernet adapter e1000e.

linux - Linux 上的多播

java - PowerMockito doThrow 不抛出异常