背景
手机要在局域网内发现wifi模块设备,以前的项目方案是用udp广播,但是由于做ios开发的小伙子技术水平有限,处理不好这个广播,导致路由器阻塞卡死,经常出各种问题。
这个版本原想用组播的,但是发现原来android有一个Context.NSD_SERVICE
服务可以用来做局域网发现,所以就用这个mDNS来做局域网发现。
填坑
由于手机APP要发现wifi模块,所以APP作为客户端接收数据,wifi模块作为服务端,负责发送自己的模块信息。
主要用到NsdManager,具体客户端代码可以网上自己搜
NsdManager mNsdManager = (NsdManager) mContext.getSystemService(Context.NSD_SERVICE);
其中有个参数NSD_SERVER_TYPE,这个参数是不能随便乱改的,否则服务启动会失败,
mNsdManager.discoverServices(NSD_SERVER_TYPE, NsdManager.PROTOCOL_DNS_SD, mDiscoveryListener);

查看源码注释,"_http._tcp" 是用来做http协议,"_ipp._tcp"是用来做打印机协议。
网友评论