如何连接到没有java端口号的服务器?

时间:2014-11-06 22:45:17

标签: java for-loop client-server

我正在努力建立一个通用客户端"可以连接到给定IP地址的任何服务器。我想知道是否有办法找到端口号。我试过在一段时间内使用for循环(true)。 for循环将终止于65535,即可能的最高端口号。每次循环遍历for循环时,它都会创建一个新的Socket,其中包含ip地址和正在测试的端口号。

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);      
}

}

1 个答案:

答案 0 :(得分:0)

我对Socket了解不多,但我可以告诉你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++)