Android NSD局域网发现服务

近期在了解局域网发现服务的时候无意间看到Android 自带的(Network Service Discovery)网络发现服务,在一番验证之后发现实现比较简单,可靠性也高,因此在这里做一个整理,算是对自己知识做一个归档。

网络服务发现(NSD)是一种机制,它允许设备在本地网络上相互发现并提供服务。在Android平台上,NSD API使得应用可以轻松地发现和注册网络上的服务。以下是NSD的一些关键点和如何在Android应用中使用它:

1.NSD的基本概念: NSD实现了基于DNS的服务发现(DNS-SD)机制,允许应用通过指定服务类型和名称来请求服务。这使得用户可以发现并连接到其他设备上运行的相同应用,适用于文件共享、多人游戏等点对点应用。

2.注册服务: 在本地网络上注册服务是可选的。如果需要注册服务,首先需要创建一个NsdServiceInfo对象,该对象提供了其他设备在决定是否连接到您的服务时所需的信息。服务名称是实例名称,对网络上的其他设备可见,且必须是唯一的。服务类型指定了应用使用的协议和传输层,例如_http._tcp表示通过TCP运行的HTTP协议,关于协议列表可以在该网页中查到: Service Name and Transport Protocol Port Number Registry

3.发现服务: 要发现网络上的服务,需要设置一个发现监听器,并调用discoverServices()方法。监听器会通知应用何时启动、何时发生故障,以及何时发现和丢失服务。

4.权限要求: 使用NSD服务需要在应用的AndroidManifest.xml文件中添加网络权限,如INTERNET权限。

5.示例代码: 代码中有完整的注释,这里就不再过多赘述。

注册服务的示例代码

public class NsdService implements NsdManager.RegistrationListener {
   
    private final NsdManager mNsdManager;

    /**
     *  自定义服务名称,该名称对局域网内使用NSD查找本地服务的设备可见。
     *  名称必须唯一,但是如果网络中有同名的服务,安卓系统会自动处理冲突,其中一个会被自动转换为类似MyService(1)这样的名称。
     */
    private String mServiceName = "MyService";
    /**
     * 服务类型,即指定应用使用的协议和传输层。
     * 语法是“_< protocol >._< transportlayer >”,这里服务使用了TCP协议上的HTTP协议。
     * 想要提供打印服务(例如,一台网络打印机)的应用应该将服务的类型设置为“_ipp._tcp”。
     * 其他协议可以IANA中查看到:https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml
     */
    private String mServiceType = "_http._tcp.";

    NsdService(Context context) {
   
        mNsdManager = (NsdManager) context.getSystemService(Context.NSD_SERVICE);
    }

    /**
     * 注册服务
     * @param port 网络服务的端口
     */
    public void registerService(int port) {
   
        //创建了一个NsdServiceInfo 并传入端口、服务名称和协议
        NsdServiceInfo serviceInfo = new NsdServiceInfo();
        //这里是你要告诉发现端,你的网络服务的端口,可能是你的server socket的启动端口,切记非NSD的启动端口。
        serviceInfo.setPort(port);
        serviceInfo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值