2010-08-30 60 views
2

我收到以下錯誤,當我的客戶端試圖連接到我的服務器套接字:Java的網絡:連接被拒絕 - 是的,我的服務器運行

java.net.ConnectException: Connection refused: connect 

不過,我的服務器真正在運行,在同機。我嘗試使用路由器的外部IP連接到它。但是,當我嘗試連接"localhost"時,它工作。而且,是的,我在我的路由器中進行了端口轉發。即使canyouseeme.org可以連接到我的服務器(該網站上說:「成功」,並在我的服務器日誌中顯示有人連接到服務器。)

因此,是不是因爲某種原因無法連接到同一臺機器(或到同一網絡中的機器)通過外部IP?或者這是Windows的典型特徵? (通常,我使用Linux)

我也嘗試完全禁用Windows防火牆。

的ServerSocket:

public ServerSocket ssocket; 
public List<ClientHandler> handlers; 

public Server(int port) { // Constructor 
    try { 
     ssocket = new ServerSocket(port); 
     this.handlers = new ArrayList<ClientHandler>(); 
     IpSharingManager.uploadData(Utilities.getPublicIp(), port); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     System.exit(-1); 
    } 
} 

客戶:

public InvisibleClient(String host, int port) { 
    try { 
     System.out.println("Trying to connect to " + host + ":" + port); 
     this.host = host; 
     this.socket = new Socket(host, port); 
     this.bis = new BufferedInputStream(this.socket.getInputStream()); 
     this.bos = new BufferedOutputStream(this.socket.getOutputStream()); 
     this.console = new RemoteConsole(this.socket); 
     initializeCommunication(); 
     System.out.println("Successfully connected!"); 
     new Thread(this, "Client Thread").start(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     System.out.println("No server available"); 
    } 
} 

感謝

+0

假設你正在編寫一個TCP服務器,你能夠telnet到你的服務器嗎?試試:telnet localhost <端口號服務器> – gawi 2010-08-30 16:20:17

+0

你正在運行哪個服務器? – 2010-08-30 16:21:25

+0

@gawi:我正在運行Windows ... – 2010-08-30 16:21:51

回答

3

有些路由器不允許內部網絡連接到路由器的外部IP地址。

您可以嘗試使用telnet連接到您的服務器套接字。如果telnet無法建立連接,則可能是網絡問題。

+0

也許,我會在通過更多網絡訪問時嘗試它。 – 2010-08-30 16:23:24

+0

爲什麼接受如果你不知道我是正確的答案? – 2010-08-30 18:54:42

0

將java.exe進程和端口添加到防火牆例外列表中?

編輯:只讀你已經試過。我所能建議的就是確保網絡不會阻塞該端口。 (路由器)

0

您是否嘗試過使用JVM選項運行它:java.net.preferIPv4Stack=true

0

對於我在代碼中看到的部分,您錯過了接受連接的部分,在實例化服務器套接字之後,您需要ssocket.accept()接受連接,然後您必須從套接字

開始讀取outputstrem
相關問題