2014-11-06 72 views
0

我想製作一個「通用客戶端」,可以連接到任何給定IP地址的服務器。我想知道是否有辦法找到端口號。我試過在一段時間內使用for循環(true)。 for循環將終止於65535,即可能的最高端口號。每次它循環通過for循環時,它都會創建一個新的Socket,其中包含正在測試的ip地址和端口號。如何連接到沒有java端口號的服務器?

import java.io.IOException; 
import java.net.*; 

public class MainClass { 

static String serverIp = "127.0.0.1"; // or what ever ip the server is on 


public static void main(String[] args) { 

    try { 
     while (true) { 
      for (int x = 1; x == 65535; x++) {     
       Socket serverTest = new Socket(
         InetAddress.getByName(serverIp), x); 
       if(serverTest.isConnected()){ 
        connect(serverTest.getPort()); 
       } 

      } 


    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

} 

private static void connect(int port) throws UnknownHostException, IOException { 
    Socket serverTest = new Socket(InetAddress.getByName(serverIp), port);  
} 

}

+0

'isConnected()'測試是徒勞的。如果它沒有連接,它就不會被構造:構造函數會拋出某種「IOException」。 – EJP 2014-11-06 23:12:22

+0

我認爲這不是一個好方法。如果你在Linux中工作,然後使用一些命令,你可以通過你連接的端口找到 – 2014-11-07 04:55:47

回答

0

我不知道很多關於插口,但我可以告訴你,肯定是你的for循環的一個問題:

for (int x = 1; x == 65535; x++) 

記住,for循環只是擴大像一個while循環,所以這轉換爲以下內容:

int x = 1; 
while (x == 65535) { 
    // ... 
    x++; 
} 

您現在可以看到發生了什麼。 (該循環從未被執行)看起來像你想這樣:

//    v 
for (int x = 1; x <= 65535; x++) 
相關問題