繁体   English   中英

尝试与外部IP连接时连接被拒绝

[英]Connection refused when trying to connect with an external IP

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

我想我把程序(客户端和服务器)的核心定为钉子,并设法使用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。 如果有人希望我在此处添加它,请告诉我,我会的。

服务器和客户端的代码都可以在这里找到

注意事项:

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

如果有人知道我在做错什么,或者我根本做不到什么,请告诉我,我将非常感谢。

我不是Mac方面的专家,但是根据lsof的输出,看来您的程序绑定在仅IPv6地址上。 它可以在localhost上正常工作,但是如果您尝试使用公共IP地址(并使用IPv4),则可能是问题的根源。 至于端口号,在OS之类的UNIX上,您需要对低于1024的用户端口具有root访问权限。无论如何,您应该尝试在Mac上禁用IPv6,然后查看问题是否继续。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM