Android网络服务发现(NSD)使用

NSD(NsdManager)是Android SDK中自带的类库,可以集成直接使用。

使用 NSD服务需要(android4.1及以上) minSdkVersion >16

通常应用于局域网内不同应用设备的互联.

Nsd的两个功能

Nsd 注册功能:

进行Nsd注册:自定义服务名、端口号,IP地址注册到Nsd服务中

Nsd 扫描功能:

扫描到当前局域网内所有已通过NSD注册了的应用设备的网络信息(服务名、端口号、IP地址)

Nsd服务端

步骤

NsdManager初始化

nsdManager = (NsdManager) getSystemService(NSD_SERVICE);

创建一个server来获取端口

try {

mServerSocket = new ServerSocket(0);//设为0,会自动获取没有占用的端口

mPort = mServerSocket.getLocalPort();

} catch (IOException e) {

e.printStackTrace();

}

创建NsdServiceInfo

mNsdServiceInfo = new NsdServiceInfo();

mNsdServiceInfo.setServiceName(SERVICE_NAME);

mNsdServiceInfo.setServiceType(SERVICE_TYPE);

mNsdServiceInfo.setPort(mPort);

创建注册监听

private void createRegistration() {

mRegistrationListener = new NsdManager.RegistrationListener() {

@Override

public void onRegistrationFailed(NsdServiceInfo nsdServiceInfo, int i) {

Toast.makeText(MainActivity.this, "onRegistrationFailed", Toast.LENGTH_SHORT).show();

}

@Override

public void onUnregistrationFailed(NsdServiceInfo nsdServiceInfo, int i) {

Toast.makeText(MainActivity.this, "onUnregistrationFailed", Toast.LENGTH_SHORT).show();

}

@Override

public void onServiceRegistered(NsdServiceInfo nsdServiceInfo) {

Toast.makeText(MainActivity.this, "onServiceRegistered", Toast.LENGTH_SHORT).show();

}

@Override

public void onServiceUnregistered(NsdServiceInfo nsdServiceInfo) {

Toast.makeText(MainActivity.this, "onServiceUnregistered", Toast.LENGTH_SHORT).show();

}

};

}

注册

mNsdManager = (NsdManager) getSystemService(NSD_SERVICE);

mNsdManager.registerService(mNsdServiceInfo, NsdManager.PROTOCOL_DNS_SD, mRegistrationListener);

第2步创建NsdServiceInfo,调用各种set方法,是为了给客户端信息,客户端通过get方法可以拿到相应的信息。

第4步注册中的NsdManager.PROTOCOL_DNS_SD是基于Dns的服务发现协议。

Nsd客户端

步骤

NsdManager初始化nsdManager = (NsdManager) getSystemService(NSD_SERVICE);

创建两个监听器。分别是ResolveListener和DiscoveryListener分别来监听NsdServiceInfo的信息和服务的链接成功和失败。

private void createResolverListener() {

mResolverListener = new NsdManager.ResolveListener() {

@Override

public void onResolveFailed(NsdServiceInfo nsdServiceInfo, int i) {

Toast.makeText(MainActivity.this, "onResolveFailed", Toast.LENGTH_SHORT).show();

}

@Override

public void onServiceResolved(NsdServiceInfo nsdServiceInfo) {

mNsdServiceInfo = nsdServiceInfo;

}

};

}

private void createDiscoverListener() {

mDiscoveryListener = new NsdManager.DiscoveryListener() {

@Override

public void onStartDiscoveryFailed(String s, int i) {

Toast.makeText(MainActivity.this, "onStartDiscoveryFailed", Toast.LENGTH_SHORT).show();

}

@Override

public void onStopDiscoveryFailed(String s, int i) {

Toast.makeText(MainActivity.this, "onStopDiscoveryFailed", Toast.LENGTH_SHORT).show();

}

@Override

public void onDiscoveryStarted(String s) {

Toast.makeText(MainActivity.this, "onDiscoveryStarted", Toast.LENGTH_SHORT).show();

}

@Override

public void onDiscoveryStopped(String s) {

Toast.makeText(MainActivity.this, "onDiscoveryStopped", Toast.LENGTH_SHORT).show();

}

@Override

public void onServiceFound(NsdServiceInfo nsdServiceInfo) {

mmNsdServiceInfo = nsdServiceInfo;

//这里的nsdServiceInfo只能获取到名字,ip和端口都不能获取到,要想获取到需要调用NsdManager.resolveService方法

Toast.makeText(MainActivity.this, "onServiceFound", Toast.LENGTH_SHORT).show();

}

@Override

public void onServiceLost(NsdServiceInfo nsdServiceInfo) {

Toast.makeText(MainActivity.this, "onServiceLost", Toast.LENGTH_SHORT).show();

}

};

}

DiscoveryListener这个监听中的NsdServiceInfo只能获取到名字,ip和端口都不能获取到,要想获取到需要调用NsdManager.resolveService方法。

发现周边的NSD相关网络

nsdManager.discoverServices(SERVICE_TYPE, NsdManager.PROTOCOL_DNS_SD, mDiscoveryListener);

第一个参数要和NSD服务器端定的ServerType一样.

第二个参数是固定的

第三个参数是扫描监听器

主动调用resolveService方法

nsdManager.resolveService(mmNsdServiceInfo, mResolverListener);

主动调用该方法,会触发ResolveListener(),从而获取到NsdServiceInfo信息。

需要停止时调用

nsdManager.stopServiceDiscovery(mDiscoveryListener);

android nsd和udp广播,Android网络服务发现(NSD)使用相关推荐

  1. android p2p 连接服务器上,当通过Wi-Fi P2P使用网络服务发现时无法连接到Android设备每个人都可以使用网络服务发现...

    ! 我正在开发一个Android应用程序,允许与附近已安装此应用程序的设备聊天.为了做到这一点,我使用Wi-Fi P2P API和网络服务发现来搜索附近的设备. 我已经编写了用于在服务启动的线程中搜索 ...

  2. Android网络服务发现(NSD)协议的使用

    Android的网络服务发现协议(NSD)能够用于在小范围的网络中发现邻近设备上的某个应用.这对于一些社交网络.多人游戏类的应用会很有帮助. Android的NSD的用法大致上分为四种操作: 1. 注 ...

  3. android自带的nsd发现服务器,Android网络服务发现(NSD)协议的使用

    Android的网络服务发现协议(NSD)可以用于在小范围的网络中发现邻近设备上的某个应用.这对于一些社交网络.多人游戏类的应用会非常有帮助. Android的NSD的使用方法大致上分为四种操作: 1 ...

  4. android自带的nsd发现服务器,Android NSD(网络服务发现)是否与iOS中的Bonjour服务兼容?...

    I will create a server-less local networking App for iOS and Android. the App in both iOS and Androi ...

  5. Android基于NSD实现网络服务发现功能

    一. 简介 网络服务发现:一般是指通过此功能,在局域网内来发现同样支持此功能的设备,并跟其他设备建立连接. Android 提供了一个网络服务发现(NSD),可让应用访问其他设备在本地网路上提供的服务 ...

  6. android 发现服务,Android服务之网络服务发现服务

    自android 4.1 开始实现了一个网络服务的发现服务NsdService,其基于苹果的Bonjour服务发现协议,支持远程服务的发现和零配置. Bonjour协议包括IP地址的自动分配.服务名称 ...

  7. android系统休眠发广播,Android - BroadcastReceiver

    BroadcastReceiver BroadcastReceiver,广播接收者,用来接收系统和应用的广播,并做出相应的处理,如电量过低时提示用户充电等: BroadcastReceiver 是 A ...

  8. Android 通过局域网udp广播自动建立socket连接

    Android开发中经常会用到socket通讯.由于项目需要,最近研究了一下这方面的知识. 需求是想通过wifi实现android移动设备和android平台的电视之间的文件传输与控制. 毫无疑问这中 ...

  9. unity udp广播 android,unity发送局域网广播信息

    开发中有事须要一个功能是教师机经过广播发送给学生机实现通信,这时能够考试使用socket的udp广播功能来实现,代码以下:socket using System; using System.Text; ...

最新文章

  1. Python最重要的5大功能,​要是能早点了解就好了
  2. Dubbo服务降级配置
  3. 中国电梯市场产量规模与盈利趋势分析报告2022-2028年
  4. 中文版示例代码浏览器for Windows 8
  5. Django(part4)--练习及re_path方法
  6. java8 streams_Java 8 Streams:过滤和谓词否定
  7. VC++ 6.0(英文正版)安装及其编译注意事项
  8. D3 scaleQuantize
  9. hdu2243 ac自动机
  10. 搬运: CVonline: 图像数据库(一) (更新于20190821)
  11. 51.La网站统计邀您认知数据可视化
  12. HR告诉你,怎么回答“为什么从上家公司离职?”
  13. 现代密码学-密钥管理技术
  14. Word不会排版!看这里,3分钟教你学会30个排版技巧
  15. 201509281125_《为什么移动app会很慢的深度分析(摘自司徒正美博客园文章)》
  16. Qt模仿安卓手机中app图标移动
  17. Linux服务器安装杀毒软件ClamAV
  18. 服务器关闭微软小娜,言而无信: 微软悄悄将小娜的禁用网络搜索选项废弃
  19. 不看后悔系列:强烈推荐的一款截图神器
  20. WL-test (GIN)

热门文章

  1. Angular 2+ Material Design Admin Template
  2. 毕业设计 汉语多音字注音研究与实现
  3. 移动互联网-2011 年值得关注的100个应用程序
  4. C语言常量(整型、实型、字符型、字符串、符号常量)
  5. 告诉你外语学习的真实方法及误区分析(整理)
  6. HTTP协议响应状态码(301、302、303的区别)
  7. 《基于数字孪生的产品生命周期绿色制造新模式》2019年6月 陶飞等
  8. 自考计算机数据结构导论,自考数据结构导论……
  9. unity文字逐个出现实现文字打印机效果
  10. 多传感器融合定位四-3D激光里程计其四:点云线面特征提取