Atitit.upnp SSDP 查找nas的原理与实现java php c#.net c++
来源:互联网 发布:自动抠图软件 编辑:程序博客网 时间:2024/05/18 02:00
Atitit.upnp SSDP 查找nas的原理与实现java php c#.net c++
1. 查找nas的原理1
2. 与dlna的关系1
3. 与ssdp的关系1
4. Cling - Java/Android UPnP library and tools3
5. 框架 java。Net3
6. Cling Code----4
6.1. 主要流程说明。。建立UpnpService 发出查询请求4
6.2. // Let's wait 10 seconds for them to respond4
6.3. 通过回调监听器得到nas的ip地址4
6.4. Code--5
7. 参考8
1. 查找nas的原理
准备使用smb协议,但是使用unc好像太慢,直接使用smb 其ip都返回true;
或许使用ip/path的方式是可以的。。
而且也没办法区分nas和pc
只好使用upnp ssdp协议来发现nas了。。
2. 与dlna的关系
dlna是一套标准,是由微软,因特尔,索尼等大厂商组成的联盟,他们制定了一套标准让大家去用。其实dlna基本没做什么事,里面用到的协议都是现成的,而upnp是dlna进行设备控制的一个最基本的协议。如果要有dlna做了什么的话,那么就是把upnp这套协议的内容用在了数字家庭领域。使它得到了极大的发展
作者:: 绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 ) 汉字名:艾龙, EMAIL:1466519819@qq.com
转载请注明来源: http://blog.csdn.net/attilax
3. 与ssdp的关系
简单服务发现协议(SSDP,Simple Service Discovery Protocol)是一种应用层协议,是构成通用即插即用(UPnP)技术的核心协议之一。
SSDP:Simple Sever Discovery Protocol,简单服务发现协议,此协议为网络客户提供一种无需任何配置、管理和维护网络设备服务的机制。此协议采用基于通知和发现路由的多播发现方式实现。协议客户端在保留的多播地址:239.255.255.250:1900(IPV4)发现服务,
SSDP 协议消息
1、设备查询消息
当一个控制点加入到网络中时,设备发现过程允许控制点寻找网络上感兴趣的设备。发现消息包括设备的一些特定信息或者某项服务的信息,例如它的类型、标识符、和指向XML设备描述文档的指针。从设备获得响应从本质上说,内容与多址传送的设备广播相同,只是采用单址传送方式。设备查询通过HTTP协议扩展M-SEARCH方法实现的。典型的设备查询请求消息格式:
M-SEARCH * HTTP/1.1
HOST: 239.255.255.250:1900
MAN: "ssdp:discover"
MX: seconds to delay response
ST: search target
在设备接收到查询请求并且查询类型(ST字段值)与此设备匹配时,设备必须向多播地址239.255.255.250:1900回应响应消息。典型:
HTTP/1.1 200 OK
CACHE-CONTROL: max-age = seconds until advertisement expires
DATE: when reponse was generated
EXT:
LOCATION: URL for UPnP description for root device
SERVER: OS/Version UPNP/1.0 product/version
ST: search target
USN: advertisement UUID
4. Cling - Java/Android UPnP library and tools
3.2. Client operations with ControlPoint
Your primary API when writing a UPnP client application is the ControlPoint. An instance is available with getControlPoint() on the UpnpService.
public interface ControlPoint {
public void search(UpnpHeader searchType);
public void execute(ActionCallback callback);
public void execute(SubscriptionCallback callback);
}
5. 框架 java。Net
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.MulticastSocket;
import java.net.NetworkInterface;
import java.net.SocketAddress;
import java.util.Scanner;
import android.content.Context;
import android.util.Log;
6. Cling Code----
6.1. 主要流程说明。。建立UpnpService 发出查询请求
final UpnpService upnpService = new UpnpServiceImpl(listener);
upnpService.getControlPoint().search(
new STAllHeader()
);
6.2. // Let's wait 10 seconds for them to respond
System.out.println("Waiting 10 seconds before shutting down...");
Thread.sleep(10000);
6.3. 通过回调监听器得到nas的ip地址
"presentationURI": "http://192.168.2.105:5000/",
6.4. Code--
public static void main(String[] args) throws InterruptedException {
// TODO Auto-generated method stub
//UpnpServiceImpl us=new UpnpServiceImpl();
// for (Device device : us.getRegistry().getDevices()) {
// System.out.println(AtiJson.toJson(device));
// }
// UPnP discovery is asynchronous, we need a callback
RegistryListener listener = new RegistryListener() {
public void remoteDeviceDiscoveryStarted(Registry registry,
RemoteDevice device) {
System.out.println(
"Discovery started: " + device.getDisplayString()
);
}
public void remoteDeviceDiscoveryFailed(Registry registry,
RemoteDevice device,
Exception ex) {
System.out.println(
"Discovery failed: " + device.getDisplayString() + " => " + ex
);
}
public void remoteDeviceAdded(Registry registry, RemoteDevice device) {
System.out.println(
"Remote device available: " + device.getDisplayString()
);
System.out.println( AtiJson.toJson(device) );
}
public void remoteDeviceUpdated(Registry registry, RemoteDevice device) {
System.out.println(
"Remote device updated: " + device.getDisplayString()
);
}
public void remoteDeviceRemoved(Registry registry, RemoteDevice device) {
System.out.println(
"Remote device removed: " + device.getDisplayString()
);
}
public void localDeviceAdded(Registry registry, LocalDevice device) {
System.out.println(
"Local device added: " + device.getDisplayString()
);
}
public void localDeviceRemoved(Registry registry, LocalDevice device) {
System.out.println(
"Local device removed: " + device.getDisplayString()
);
}
public void beforeShutdown(Registry registry) {
System.out.println(
"Before shutdown, the registry has devices: "
+ registry.getDevices().size()
);
}
public void afterShutdown() {
System.out.println("Shutdown of registry complete!");
}
};
// This will create necessary network resources for UPnP right away
System.out.println("Starting Cling...");
// UpnpService upnpService = new UpnpServiceImpl(listener);
final UpnpService upnpService = new UpnpServiceImpl(listener);
upnpService.getControlPoint().search(
new STAllHeader()
);
// Let's wait 10 seconds for them to respond
System.out.println("Waiting 10 seconds before shutting down...");
Thread.sleep(10000);
//----------------------
// Registry registry = upnpService.getRegistry();
//Collection<Device> foundDevice = registry.getDevices();
// for (Device device : foundDevice) {
//System.out.println(AtiJson.toJson(device));
//}
//
// Release all resources and advertise BYEBYE to other UPnP devices
System.out.println("Stopping Cling...");
// upnpService.shutdown();
System.out.println("--f");
Ret device
Remote device available: Synology DS213+ DS213+ 5.2-5644
{
"identity": {
"descriptorURL": "http://192.168.2.105:5000/ssdp/desc-DSM-eth0.xml",
"discoveredOnLocalAddress": "192.168.2.99",
"udn": {
"identifierString": "73796E6F-6473-6D00-0000-0011321cb389"
},
"maxAgeSeconds": 1900
},
"version": {
"major": 1,
"minor": 0
},
"type": {
"namespace": "schemas-upnp-org",
"type": "Basic",
"version": 1
},
"details": {
"friendlyName": "dy (DS213+)",
"manufacturerDetails": {
"manufacturer": "Synology",
"manufacturerURI": "http://www.synology.com"
},
"modelDetails": {
"modelName": "DS213+",
"modelDescription": "Synology NAS",
"modelNumber": "DS213+ 5.2-5644",
"modelURI": "http://www.synology.com"
},
"serialNumber": "0011321cb389",
"presentationURI": "http://192.168.2.105:5000/",
"dlnaDocs": []
},
"icons": []
}
7. 参考
java - SSDP & Android, how to reply to a M-SEARCH - Stack Overflow.htm
SSDP协议 - java学习之简单开发快乐学习 - ITeye技术网站.htm
Cling核心手册 - zangcf的专栏 - 博客频道 - CSDN.NET.htm
jcifs lib can't detect NAS - Meggie_love的专栏 - 博客频道 - CSDN.NET.htm
- Atitit.upnp SSDP 查找nas的原理与实现java php c#.net c++
- atitit.木马病毒webshell的原理and设计 java c# .net php.
- atitit.复合变量,也就是类似$$a的变量的原理与实现 java c#.net php js
- Atitit 项目语言的选择 java c#.net php??
- Atitit.sql ast 表达式 语法树 语法 解析原理与实现 java php c#.net js python
- Atitit. Async await 优缺点 异步编程的原理and实现 java c# php
- Atitit。Tree文件解析器的原理流程与设计实现 java c# php js
- Atitit 插件机制原理与设计微内核 c# java 的实现attilax总结
- atitit.js 与c# java交互html5化的原理与总结.doc
- atitit.Atitit.检测文本文件的编码 java 与php版 。Net
- Atitit.导出excel报表的设计与实现java .net php 总结
- Atitit.导出excel报表的设计与实现java .net php 总
- Atitit.面向接口的web 原理与设计重写 路由启动绑定配置url router rewriting urlpage mvc mvp的 java c#.net php js
- atitit.js javascript 调用c# java php后台语言api html5交互的原理与总结p97
- Atitit.得到网络邻居列表java php c#.net python
- atitit..代码生成流程图 流程图绘制解决方案 java c#.net php v2
- Atitit.收银机小票打印功能的设计 java php c#.net版本
- Atitit.js跨域解决方案attilax大总结 后台java php c#.net的CORS支持
- c++ stl栈容器stack的pop(),push()等用法介绍及头文件
- 代码逻辑吐槽2.
- 使用PowerMock模拟私有字段和私有方法
- SpannableString与SpannableStringBuilder
- 如何将符号表达式转为函数句柄[Matlab]
- Atitit.upnp SSDP 查找nas的原理与实现java php c#.net c++
- java序列化对象
- CodeForces 589F Gourmet and Banquet 题解
- Mysql常用函数总结
- mac 终端 常用命令
- 在C#中创建和读取XML文件
- iOS 的简单框架(常见页面)
- 进击的Android之ListView
- HBase