我一直在處理一個小型服務器/客戶端項目,並且遇到阻礙我進度的小問題。嘗試連接外部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)
我知道這些帖子得到有點兒亂,所以我上傳的代碼要點。如果有人希望我在這裏添加它,讓我知道,我會的。
The code for both the server and client can be found here。
需要注意以下幾點:
- MooConsole是一個圖書館,我寫它提供了出口程序的控制檯。我用它在我的客戶端和服務器上顯示文本。
- MooCommands是我的另一個庫,它代表可以從控制檯運行的命令。
- SocketThread是一個處理新連接的類。這使服務器可以同時連接多個客戶端。它延伸
java.lang.Thread
。我不認爲這是導致問題,所以我不包括它,但如果有必要,我可以。 Operations.DISCONNECT
是一個枚舉常量,表示斷開連接。
如果有人知道我在做什麼錯,或者我什麼都沒做好,請告訴我,我非常感謝。
防火牆?權限? Mac OS可能會主動拒絕提供的端口上的連接 – MadProgrammer 2013-04-30 01:53:25
我在Windows上試過並得到同樣的問題。我不認爲這是一個操作系統問題。 – 2013-04-30 01:56:19
仍然可能是防火牆問題。您嘗試從本地網絡或外部連接(從網絡/ VPN) – MadProgrammer 2013-04-30 01:57:27