2016-04-25 159 views
0

我有一個電腦運行運行多線程服務器插槽如下:的Java無法連接到服務器套接字

static void createServer() throws IOException { 
    //use this ip for other user 
    System.out.println(InetAddress.getLocalHost()); 
    // establish server socket 
    try { 
     ServerSocket s = new ServerSocket(8888); 

     while (true) { 
      Socket incoming = s.accept(); 
      Runnable r = new ThreadedEchoHandler(incoming, map); 
      Thread t = new Thread(r); 
      t.start(); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

}

從另一臺計算機我嘗試連接到服務器

然後(使用從第一臺計算機的IP 192.168.162.1)如下:

public void registerCmnd(Scanner keys) throws IOException { 
    InetAddress ip = InetAddress.getByName("first computer ip"); 
    try (Socket s = new Socket(ip, 8888)) { 
     ..... 
     ..... 
    } 

} 

我得到一個java.net.ConnectException。

Exception in thread "main" java.net.ConnectException: Connection timed out: connect 
at java.net.DualStackPlainSocketImpl.connect0(Native Method) 
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source) 
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source) 
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source) 
at java.net.AbstractPlainSocketImpl.connect(Unknown Source) 
at java.net.PlainSocketImpl.connect(Unknown Source) 
at java.net.SocksSocketImpl.connect(Unknown Source) 
at java.net.Socket.connect(Unknown Source) 
at java.net.Socket.connect(Unknown Source) 
at java.net.Socket.<init>(Unknown Source) 
at java.net.Socket.<init>(Unknown Source) 
at User.registerCmnd(User.java:45) 
at User.main(User.java:28) 

任何想法?

+0

向我們展示堆棧跟蹤。還有正在使用的IP地址,客戶端和服務器端。 –

+0

連接是否被一臺或另一臺機器上的防火牆阻止? –

+0

我關閉了兩臺機器上的所有防火牆 – bzak

回答

0

您要麼有錯誤的IP,端口不會被轉發,要麼兩者都有。還要確保先運行服務器。

+0

服務器正在運行。我使用InetAddres.getLocalHost()方法獲取第一臺機器的ip。 – bzak

+0

什麼是端口轉發? – bzak

+0

如果一臺計算機想要從另一個網絡連接,則告訴您的路由器將該計算機連接到您 –

1

看起來問題不在於代碼本身。

有許多的這種可能的原因,包括

  • 防火牆,客戶端,服務器,管理程序棧,或網絡阻止訪問。

  • 您正在使用

  • 你(不是在這種情況下)

  • 在客戶端使用了錯誤的服務器端口號您使用的是IP客戶端服務器上的錯誤的IP地址地址不是從客戶端路由到服務器。例如,如果服務器的IP是專用地址,並且客戶端位於不同的網絡上。

  • 有人在客戶端或服務器上錯誤地配置了數據包轉發(例如iptables)或路由(例如路由等)。或者別的地方。


如果我是你,我會看到一個計算機是否可以ping了,反之亦然。如果失敗,請檢查路由表。請注意,這是最有可能的一個網絡配置問題,而不是一個編程問題。

+0

我從客戶端計算機中ping服務器:數據包:sent = 4,Recieved = 1 – bzak

相關問題