android nsd和udp广播,Android网络服务发现(NSD)使用
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)使用相关推荐
- android p2p 连接服务器上,当通过Wi-Fi P2P使用网络服务发现时无法连接到Android设备每个人都可以使用网络服务发现...
! 我正在开发一个Android应用程序,允许与附近已安装此应用程序的设备聊天.为了做到这一点,我使用Wi-Fi P2P API和网络服务发现来搜索附近的设备. 我已经编写了用于在服务启动的线程中搜索 ...
- Android网络服务发现(NSD)协议的使用
Android的网络服务发现协议(NSD)能够用于在小范围的网络中发现邻近设备上的某个应用.这对于一些社交网络.多人游戏类的应用会很有帮助. Android的NSD的用法大致上分为四种操作: 1. 注 ...
- android自带的nsd发现服务器,Android网络服务发现(NSD)协议的使用
Android的网络服务发现协议(NSD)可以用于在小范围的网络中发现邻近设备上的某个应用.这对于一些社交网络.多人游戏类的应用会非常有帮助. Android的NSD的使用方法大致上分为四种操作: 1 ...
- 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 ...
- Android基于NSD实现网络服务发现功能
一. 简介 网络服务发现:一般是指通过此功能,在局域网内来发现同样支持此功能的设备,并跟其他设备建立连接. Android 提供了一个网络服务发现(NSD),可让应用访问其他设备在本地网路上提供的服务 ...
- android 发现服务,Android服务之网络服务发现服务
自android 4.1 开始实现了一个网络服务的发现服务NsdService,其基于苹果的Bonjour服务发现协议,支持远程服务的发现和零配置. Bonjour协议包括IP地址的自动分配.服务名称 ...
- android系统休眠发广播,Android - BroadcastReceiver
BroadcastReceiver BroadcastReceiver,广播接收者,用来接收系统和应用的广播,并做出相应的处理,如电量过低时提示用户充电等: BroadcastReceiver 是 A ...
- Android 通过局域网udp广播自动建立socket连接
Android开发中经常会用到socket通讯.由于项目需要,最近研究了一下这方面的知识. 需求是想通过wifi实现android移动设备和android平台的电视之间的文件传输与控制. 毫无疑问这中 ...
- unity udp广播 android,unity发送局域网广播信息
开发中有事须要一个功能是教师机经过广播发送给学生机实现通信,这时能够考试使用socket的udp广播功能来实现,代码以下:socket using System; using System.Text; ...
最新文章
- Python最重要的5大功能,​要是能早点了解就好了
- Dubbo服务降级配置
- 中国电梯市场产量规模与盈利趋势分析报告2022-2028年
- 中文版示例代码浏览器for Windows 8
- Django(part4)--练习及re_path方法
- java8 streams_Java 8 Streams:过滤和谓词否定
- VC++ 6.0(英文正版)安装及其编译注意事项
- D3 scaleQuantize
- hdu2243 ac自动机
- 搬运: CVonline: 图像数据库(一) (更新于20190821)
- 51.La网站统计邀您认知数据可视化
- HR告诉你,怎么回答“为什么从上家公司离职?”
- 现代密码学-密钥管理技术
- Word不会排版!看这里,3分钟教你学会30个排版技巧
- 201509281125_《为什么移动app会很慢的深度分析(摘自司徒正美博客园文章)》
- Qt模仿安卓手机中app图标移动
- Linux服务器安装杀毒软件ClamAV
- 服务器关闭微软小娜,言而无信: 微软悄悄将小娜的禁用网络搜索选项废弃
- 不看后悔系列:强烈推荐的一款截图神器
- WL-test (GIN)