2012-03-26 65 views
0

我用Java創建了一個簡單的echo服務器。當我在本地嘗試時,它應該可以正常工作。但是,當我嘗試使用服務器運行的IP地址和端口號從另一臺計算機連接它時,它永遠不會連接。從另一臺計算機連接到服務器還有其他事情嗎?如何連接到運行Java服務器的其他計算機?

import java.net.Socket; 
import java.net.ServerSocket; 

public class EchoServer { 

    public static void main(String[] args) throws Exception { 

     // create socket 
     int port = 4444; 
     ServerSocket serverSocket = new ServerSocket(port); 
     System.err.println("Started server on port " + port); 

     // repeatedly wait for connections, and process 
     while (true) { 

      // a "blocking" call which waits until a connection is requested 
      Socket clientSocket = serverSocket.accept(); 
      System.err.println("Accepted connection from client"); 

      // open up IO streams 
      In in = new In (clientSocket); 
      Out out = new Out(clientSocket); 

      // waits for data and reads it in until connection dies 
      // readLine() blocks until the server receives a new line from client 
      String s; 
      while ((s = in.readLine()) != null) { 
       out.println(s); 
      } 

      // close IO streams, then socket 
      System.err.println("Closing connection with client"); 
      out.close(); 
      in.close(); 
      clientSocket.close(); 
     } 
    } 
} 
+1

也許防火牆阻止了你的連接。嘗試禁用它進行簡短的測試。你是否通過路由器與另一臺計算機分開? – Tudor 2012-03-26 20:48:49

+2

添加代碼如何創建服務器套接字? – 2012-03-26 20:49:16

+0

調用'netstat -na'並檢查您綁定服務器的地址。它應該是0.0.0.0:*(或者::: *對於ipv6) – 2012-03-26 20:51:39

回答

0

如果這是你的局域網上通過名稱引用(計算機的實際名稱運行你EchoServer的機器,我相信他們告訴你做這樣的太陽教程,張貼了這個回聲服務器鍛鍊; Tibial是否正確? )。如果可行,這對解決問題將有很大幫助。

1

請檢查以下事項。

  1. 服務器計算機是否位於網絡代理之後?

  2. 它有一個獨立的公共IP地址,通過它可以從任何地方從 訪問?或者,它是否有內部IP,通過它可以在您的局域網中訪問?

  3. 確保FireWalls對於端口4444有例外情況。或者您可以在客戶端和服務器上關閉它。

如果沒有幫助,請發佈例外(通過編輯問題)。或者服務器程序正在凍結而沒有任何錯誤?

+0

我相信防火牆已關閉。我如何檢查前兩個? – ipman 2012-03-26 21:23:15

+0

從這兩臺電腦打開http://ipchicken.com/。如果兩個IP相同,則位於網絡代理的後面,而您的計算機沒有單獨的公共IP。 – tusar 2012-03-26 21:27:25

相關問題