簡體   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