gpt4 book ai didi

java:LAN 连接的良好套接字超时?

转载 作者:行者123 更新时间:2023-11-29 05:26:01 27 4
gpt4 key购买 nike

我有一个服务器(在我的笔记本电脑上运行的 java 应用程序)和一个客户端(在我的 android 智能手机上运行的 java 应用程序)。我正在尝试从我的客户端自动查找服务器的 IP 地址

现在我只是在同一个 LAN (192.168.1.0 > 192.168.1.1.255) 中循环所有 IP,如果服务器(正在监听自定义端口)接受连接,那么我就找到了 IP。

问题是,如果我将连接超时设置为小于 200 毫秒,大多数时候客户端找不到服务器。

所以问题是,我如何才能实现更好(更快)的方法来查找服务器 IP?我尝试了 java InetAddress.isReachable() 方法,但服务器似乎总是无法访问...

而且,如果没有更好的方法,您认为本地 (LAN) 套接字连接的超时值是多少?

最佳答案

只是为了其他人......我刚刚找到了一种在不到半秒内找到服务器 IP 的好方法!

这里是我的解决方案:

String partialIp = "192.168.1.";
int port = 123;
int counter;
boolean found;
String ip;

Runnable tryNextIp = new Runnable() {
@Override
public void run() {
int myIp = counter++;
String targetIpTemp = partialIp + myIp;
Socket socketTemp = new Socket();
try {
socketTemp.connect(new InetSocketAddress(targetIpTemp, port), 6000);
socketTemp.close();
ip = targetIpTemp;
found = true;
} catch (IOException e) {
try {
socketTemp.close();
} catch (IOException e1) {}
}
}
};

String findIp() {
counter = 0;
found = false;

ExecutorService executorService = Executors.newFixedThreadPool(256);
for (int i=0; i<256; i++) {
if (found)
break;
executorService.execute(tryNextIp);
}
executorService.shutdown();
try {
while (!found && !executorService.isTerminated())
executorService.awaitTermination(200, TimeUnit.MILLISECONDS);
} catch (InterruptedException e) {}
if (found)
return ip;
else
return null;
}

关于java:LAN 连接的良好套接字超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22647034/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com