我正在制作一个需要与另一台设备上的另一个应用程序通信的应用程序。唯一的问题是设备的 IP 地址并不总是相同的。我想让客户端在特定端口上找到服务器,但是如何在网络上找到打开了该端口的设备,而无需在客户端输入服务器的 ip?我找到了 Android 的 NsdManager,但它适用于 API 级别 16 及更高级别。我正在开发 10 级。
提前致谢!
我正在制作一个需要与另一台设备上的另一个应用程序通信的应用程序。唯一的问题是设备的 IP 地址并不总是相同的。我想让客户端在特定端口上找到服务器,但是如何在网络上找到打开了该端口的设备,而无需在客户端输入服务器的 ip?我找到了 Android 的 NsdManager,但它适用于 API 级别 16 及更高级别。我正在开发 10 级。
提前致谢!
您可以使用零配置网络来帮助解决您的问题。查看以下网站- http://www.multicastdns.org/ 和http://en.wikipedia.org/wiki/Zero-configuration_networking。
您还可以使用 MDSND,查看Android 上的 Bonjour 实现以获取更多信息。
我很抱歉没有回应。
我通过向所有设备(255.255.255.255)广播一个 UDP 数据包解决了这个问题。监听指定端口的所有设备都会响应,因此客户端现在将知道服务器的 IP 地址。TCP 用于进一步的通信。
这应该不会太难。
有问题的私有 IP 地址应采用以下形式192.168.1.x
(x 介于 1 和 255 之间)
通常,我相信这个数字是按顺序分配的,所以首先我会检查是否
192.168.1.1
如果不是那个,那么我会检查
192.168.1.2
然后
192.168.1.3
然后
etc.
广播在大多数情况下都有效,下面的链接显示了如何从代码中做到这一点:[发送广播 UDP 但在其他 Android 设备上不接收它
但也有例外:
有些手机没有正确接收广播包(例如HTC),我通过从HTC手机广播解决了这个问题,一旦其他手机收到了包裹,就向HTC手机发送一个udp包(不是通过广播)
如果其中一台设备作为热点,广播似乎根本不起作用,在这种情况下,其他设备可以尝试使用网关ip(这是hotsport设备的ip)