簡體   English   中英

遠程IP拒絕連接,但本地IP接受連接

[英]Connection refused on remote IP, but accepted on local IP

如標題所示,我的服務器在本地計算機上運行,​​我對其進行了測試和調試,並且運行良好(服務器也是用Java編寫的)。 但是,當我嘗試使用遠程IP(而不是192.168.0.113而是146.255.xx)對其進行測試時,服務器沒有收到任何信息,而客戶端卻拋出了該錯誤:

09-04 18:23:27.595: W/System.err(24241): java.net.ConnectException: failed to connect to /146.255.x.x (port 4040): connect failed: ECONNREFUSED (Connection refused)
09-04 18:23:27.595: W/System.err(24241):    at libcore.io.IoBridge.connect(IoBridge.java:114)
09-04 18:23:27.595: W/System.err(24241):    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
09-04 18:23:27.595: W/System.err(24241):    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
09-04 18:23:27.595: W/System.err(24241):    at java.net.Socket.startupSocket(Socket.java:566)
09-04 18:23:27.595: W/System.err(24241):    at java.net.Socket.tryAllAddresses(Socket.java:127)
09-04 18:23:27.595: W/System.err(24241):    at java.net.Socket.<init>(Socket.java:177)
09-04 18:23:27.595: W/System.err(24241):    at java.net.Socket.<init>(Socket.java:149)
09-04 18:23:27.595: W/System.err(24241):    at com.statenislandchat.Main$2$1$1.run(Main.java:146)
09-04 18:23:27.595: W/System.err(24241): Caused by: libcore.io.ErrnoException: connect failed: ECONNREFUSED (Connection refused)
09-04 18:23:27.595: W/System.err(24241):    at libcore.io.Posix.connect(Native Method)
09-04 18:23:27.600: W/System.err(24241):    at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:85)
09-04 18:23:27.600: W/System.err(24241):    at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
09-04 18:23:27.600: W/System.err(24241):    at libcore.io.IoBridge.connect(IoBridge.java:112)
09-04 18:23:27.600: W/System.err(24241):    ... 7 more

很久以前,我在服務器PC上禁用了防火牆,並且DID轉發了路由器上的端口。 我嘗試使用一些portcanners,它們都在我的端口上檢測到服務,但是我的客戶端一次又一次無法訪問它。


解決了! 我對網絡不是很感興趣,但是如果服務器和客戶端都在同一路由器上,似乎無法像這樣進行連接。 我嘗試從遠處的客戶端進行連接,但該方法有效。

ECONNREFUSED表示已嘗試連接,並且遠程主機答復說沒有人在該端口上監聽。 那可能意味着幾件事:

  1. 那真的是您的IP嗎? ifconfig / ipconfig說什么(提示:不一定是whatismyip.com會說什么)?
  2. Java服務器是否在所有接口上偵聽? 同一端口可以在本地主機上打開,也可以在其他接口上關閉。 檢查服務器上的綁定地址。
  3. 嘗試使用telnet + tcpdump,它是否顯示數據包到達正確的地址?

這些僅僅是開始。

我也無法讓我的Android Studio Java TCP客戶端連接到開發機器上的本地服務器。 我通過修復2件事使其工作:

  1. 不要嘗試打開朝向“ 127.0.0.1”或“ localhost”的套接字。 而是找出您的本地地址。 就我而言,它與“ 192.168.0.100”一起使用,這是我的開發計算機的本地地址。

  2. 不要嘗試在android java應用程序的主線程中創建“ new Socket(address,portnumber)”。 我通過在另一個線程中創建套接字來使其工作。 這是一個臨時線程,僅在死前創建Socket並存儲引用。

問題2的例外

在主線程中創建套接字時:

11-29 11:00:35.718 27063-27063/se.mycompany.tcpclient2 E/AndroidRuntime: 
FATAL EXCEPTION: main
Process: se.mycompany.tcpclient2, PID: 27063
java.lang.IllegalStateException: Could not execute method for android:onClick
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:275)
...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM