局域网通信
文章平均质量分 88
时空掠影
专注于软件技术服务
展开
-
局域网通信时,解决在一些设备上NsdManager发现服务失败的问题
Google 提供了NsdManager Api 以支持局域网发现服务,但是在实际中,一些个别型号手机设备上,NsdManager 发现服务失败,mdns 解析失败,找不到对应的服务名称,进而无法解析出本地网络内的host 和 端口。// 找到当前设备在局域网中的 IP 地址,以便用于本地通信、服务发现或其他网络相关操作。//此处对发现的服务进行过滤去重,获取到后,回调到UI线程去更新;// 过滤 IP 地址: 过滤ipv6地址,过滤回环的 IPv4 地址。// 需要再异步中开启发现服务。原创 2024-09-03 16:25:32 · 770 阅读 · 0 评论 -
NsdManager 发现两个服务,但是解析ip 和 port 的时候,只能解析一个,什么原因?
1. 将发现的服务添加到队列中等待解析。发现多个服务并尝试解析IP和端口时,只能解析一个服务。实例: 每个服务解析请求应该是自己独立的。2. 逐一解析服务: 避免同时解析多个服务,而是一个接一个地解析,确保上一个解析完成后再开始下一个。以上方式确保每次只解析一个服务,从而避免竞争条件和回调覆盖的问题。原创 2024-08-02 19:01:20 · 981 阅读 · 0 评论 -
WiFi 局域网通信 - 发现服务和解析
1. nsdManager + NsdManager.DiscoveryListener + NsdManager.ResolveListener2. 在onStartDiscoveryFailed 和 onStopDiscoveryFailed里不要调用nsdManager.stopServiceDiscovery(this) 方法,会出现crash问题;//SERVICE_TYPE 为你自定义的服务名称,比如 const val SERVICE_TYPE = "_test-rct._tcp."原创 2024-07-28 17:09:38 · 1471 阅读 · 0 评论 -
DiscoveryListener 和 ResolveListener 的 异常 java.lang.IllegalArgumentException
1. 在调用 stopServiceDiscovery 的方法的时候, 监听器 NsdManager.DiscoveryListener没有被注册,即 没有调用 NsdManager 的 discoverServices方法,把监听器传进去。2. 两次或多次调用 stopServiceDiscovery 方法,在调用 stopServiceDiscovery 方法前,先判断是否注册了监听器,可用标志位自己实现,因为Android 系统没有提供判断监听器是否被注册的函数。先看crash 日志;原创 2024-07-24 16:02:38 · 349 阅读 · 0 评论 -
mDNS 介绍及代码示例
mDNS(Multicast DNS)是一种通过使用多播协议在本地网络中进行主机名解析的协议。它的设计使设备可以在没有中央DNS服务器的环境中自动发现和解析设备的主机名。以下是详细的工作原理和代码示例。值得一提的是,通过查询而非直接广播,mDNS 设计能够有效减少网络负载、节约资源、提高通信效率、增强安全性、管理冲突和干扰,同时更适应动态网络环境。使得 mDNS 成为小型网络和物联网环境中自动发现和解析主机名的理想解决方案。原创 2024-07-12 11:30:47 · 1763 阅读 · 0 评论