gpt4 book ai didi

java - Android 自动搜索服务器

转载 作者:行者123 更新时间:2023-11-30 04:19:49 26 4
gpt4 key购买 nike

我有一个 android 应用程序,它(通过网络)与桌面服务器应用程序(均使用 Java 和基于 GUI 编程)进行通信。现在进行测试,我只是有一种方法可以在 Android 手机上指定套接字。但是,将来当我发布应用程序时,我希望它能够尝试自己连接到服务器。

到目前为止,我的一些想法是获取电话的 IP 地址,然后循环遍历同一端口上的 C 类地址空间,并查看是否有任何这些套接字连接。你们还有什么可以建议的吗?

此外,在 Android 中获取手机 IP 地址的最佳方法是什么?我有办法,但它只适用于 android 2.3 和更低版本...在 ICS 上它完全失败并给出随机乱码。在这里:

public String getLocalIpAddress() {
try {
for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress()) {
return inetAddress.getHostAddress().toString();
}
}
}
} catch (Exception ex) {
}
return null;
}

最佳答案

在 C 级网络上循环不必要的矫枉过正。除非万不得已,否则我不会使用它。您的用户可能拥有 A 级网络(10.x.x.x,在工作场所流行)或 B 级,因为......他非常喜欢它;-)

更好的方法是使用广播地址(如果您愿意,也可以使用多播,但工作量更大)。您可以基于 UDP 数据报为您的应用程序实现简单的发现协议(protocol)。在这种情况下,您的服务器会监听广播端口,例如 UDP 192.168.0.255:6666(您选择的端口),并通过将其监听的 IP:PORT 发送给请求者来响应任何 Activity 。

Phone->Broadcast: "Is there anybody?"
Server1->Phone : "I am here. Talk to me at 192.168.0.123:6666"
Server2->Phone : "I am here. Talk to me at 192.168.0.124:6666"

然后客户端可以显示可用的服务器并询问用户想要连接到哪一个,然后连接到答案中提供的 TCP 端口(我假设客户端-服务器连接是 TCP,但它可以是任何东西,想法是一样的).

关于java - Android 自动搜索服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9446799/

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