sách gpt4 ai đã đi

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

In lại 作者:行者123 更新时间:2023-11-29 05:26:01 27 4
mua khóa gpt4 Nike

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

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

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

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

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

1 Câu trả lời

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

这里是我的解决方案:

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

Runnable tryNextIp = new Runnable() {
@Ghi đè
công khai void run() {
int myIp = counter++;
String targetIpTemp = partialIp + myIp;
Socket socketTemp = new Socket();
thử {
socketTemp.connect(new InetSocketAddress(targetIpTemp, port), 6000);
socketTemp.close();
ip = targetIpTemp;
found = true;
} bắt (IOException e) {
thử {
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)
phá vỡ;
executorService.execute(tryNextIp);
}
executorService.shutdown();
thử {
while (!found && !executorService.isTerminated())
executorService.awaitTermination(200, TimeUnit.MILLISECONDS);
} catch (InterruptedException e) {}
if (found)
return ip;
khác
trả về giá trị null;
}

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

27 4 0
Bài viết được đề xuất: Triển khai JPA tùy chỉnh // Triển khai JPA No-SQL hiện có
Bài viết được đề xuất: ios - Quicktype 选项参数处理
Bài viết được đề xuất: ios - RxSwift。订阅发生两次
Bài viết được đề xuất: java - 如何播放很多音效?
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com