我正在努力建立一个通用客户端"可以连接到给定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);
}
}
答案 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++)