SSDP协议内容解析

SSDP(Simple Service Discovery Protocol),简单服务发现协议,用于发现局域网里面的设备和服务。

SSDP消息分为设备查询消息、设备通知消息两种,通常情况下,使用更多地是设备查询消息。

1、设备查询消息:

格式例子如下:

M-SEARCH * HTTP/1.1
HOST: 239.255.255.250:1900
MAN: "ssdp:discover"
MX: 5
ST: ssdp:all

其中第一行是消息头,固定;HOST对应的是广播地址和端口,239.255.255.250是默认SSDP广播ip地址,1900是默认的SSDP端口;

MAN后面的ssdp:discover为固定,MX为最长等待时间,ST:查询目标,它的值可以是:

upnp:rootdevice 仅搜索网络中的根设备

uuid:device-UUID 查询UUID标识的设备

urn:schemas-upnp-org:device:device-Type:version 查询device-Type字段指定的设备类型,设备类型和版本由UPNP组织定义。

其中,第三种一般可以用来自定义设备,如:ST: urn:schemas-upnp-org:device:Server:1

在设备接收到查询请求并且查询类型(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

最常用的设备发现就讲完了,不常用的设备通知和设备发现差别不大,主要是:

http头不同,设备通知的头为

NOTIFY * HTTP/1.1
无MX,增加:
NT	在此消息中,NT头必须为服务的服务类型。
NTS	表示通知消息的子类型,必须为ssdp:alive或者ssdp:byebye
USN	表示不同服务的统一服务名,它提供了一种标识出相同类型服务的能力
</pre><pre code_snippet_id="377816" snippet_file_name="blog_20140605_8_5629020" class="displaycode" name="code" style="white-space: pre-wrap; word-wrap: break-word; color: rgb(57, 57, 57); font-size: 14px; line-height: 21px; margin-bottom: 0px; padding: 0px; background-color: rgb(255, 255, 255);">典型的设备通知消息格式如下:
<pre class="displaycode" name="code" style="white-space: pre-wrap; word-wrap: break-word; color: rgb(57, 57, 57); font-size: 14px; line-height: 21px; margin-bottom: 0px; padding: 0px; background-color: rgb(255, 255, 255);">NOTIFY * HTTP/1.1
HOST: 239.255.255.250:1900CACHE-CONTROL: max-age = seconds until advertisement expires
LOCATION: URL for UPnP description for root device
NT: search target
NTS: ssdp:alive
USN: advertisement UUID


下一章节将会讲述SSDP协议的Android实现,用于Android手机发现局域网里面的设备服务。


SSDP协议内容解析

时间: 2024-10-07 20:44:13

SSDP协议内容解析的相关文章

SSDP协议的Android实现以及使用

前面一篇博客里面已经介绍过SSDP协议原理,本篇博客将实现实现Android上的SSDP协议. 关键技术分析:1.发送广播:须要发送送广播,所以须要使用MulticastSocket.SocketAddress.InetAddress,须要掌握. 2.SSDP数据报格式:标准的SSDP Server解析的时候对于分段的字段选用的特征码是"\r\n",须要特别注意. 3.訪问权限:须要互联网,要在Mainfest中加入?联网的相关权限. 下面是我的源代码: 1.SSDPConstants

https协议了解,以及相关协议的解析

https协议了解,以及相关协议的解析 HTTPS简介 HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版.即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL. 它是一个URI scheme(抽象标识符体系),句法类同http:体系.用于安全的HTTP数据传输.https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP

C# 串口操作系列(3) -- 协议篇,二进制协议数据解析

C# 串口操作系列(3) -- 协议篇,二进制协议数据解析 标签: c#bufferobject通讯byte硬件驱动 2010-05-27 09:54 51565人阅读 评论(215) 收藏 举报  分类: 通讯类库设计(4)  版权声明:本文为博主原创文章,未经博主允许不得转载. 我们的串口程序,除了通用的,进行串口监听收发的简单工具,大多都和下位机有关,这就需要关心我们的通讯协议如何缓存,分析,以及通知界面. 我们先说一下通讯协议.通讯协议就是通讯双方共同遵循的一套规则,定义协议的原则是尽可

C# 串口操作系列(4) -- 协议篇,文本协议数据解析

C# 串口操作系列(4) -- 协议篇,文本协议数据解析 标签: c#uiobjectstringbyte 2010-06-09 01:50 19739人阅读 评论(26) 收藏 举报  分类: 通讯类库设计(4)  版权声明:本文为博主原创文章,未经博主允许不得转载. 上一篇已经介绍了协议的组成,一个协议,一般具有 :协议头+长度+数据+校验 , 文本格式可以直观的定义回车换行是协议的结尾,所以我们可以省略数据长度,增加协议尾.即: 协议头 + 数据 + 校验 + 数据尾 . 文本方式的数据比

文件内容解析

下面是我的第一个React Native程序,也是自己对该程序的文件内容解析一些理解,注释很清楚哟,相信你一看就懂!!!! /** * Sample React Native App * https://github.com/facebook/react-native * @flow */ // 1.引入组件 import React, { Component } from 'react'; import { AppRegistry, // 注册 StyleSheet, // 样式 Text,

UDT协议深入解析

将近两年以前因为想选择一个兼顾TCP协议的可靠性和UDP协议的高效性来进行我们某种数据的传输曾经选择过UDT协议,也进行了一段时间的学习.实践.但最终由于不适合我们的业务场景放弃了它,但它的实现原理.代码实现.拓展使用的优秀给我留下了很深刻的印象,今天翻出自己曾经的一篇总结笔记来和大家一起回顾下UDT协议. UDT协议是什么?是一种基于UDP的数据传输协议(UDP-based Data Transfer Protocol,简称UDT). UDT协议的主要作用是什么?UDT的主要目的是支持高速广域

TCP协议 状态解析和状态统计

一.三次握手和四次挥手 1.建立连接(三次握手) (1)服务器会处于listen状态,客户端发送一个带SYN标志的TCP报文到服务器. (2)服务器端回应客户端的请求,这是三次握手中的第2个报文,这个报文同时带SYN标志和ACK标志. 因此它表示对刚才客户端SYN报文的回应:同时又标志SYN给客户端,询问客户端是否准备好进行数据通讯. (3)客户必须再次回应服务段一个ACK报文,这个时候两端就处于已经建立连接 2.连接终止(四次握手) 由于TCP连接是全双工的,因此每个方向都必须单独进行关闭.这

php将某一模板内容解析过后,并获取其返回值

在PHP中,将一个模板文件(.php)文件定义过后,如果要将参数传入,并且将该文件解析过后的内容作为返回值,可以php操作缓冲区来获取该模板文件的结果 //打开缓冲区 ob_start(); //引入所需要的模板文件 include('file_name.tpl.php');          //获取缓冲区中的内容,并且将该内容赋值给一个变量 $return_info = ob_get_contents(); //清空(擦除)缓冲区并关闭输出缓冲                     ob_

内容提供者ContentProvider和内容解析者ContentResolver

简介 ContentProvider 在android中的作用是对外共享数据,也就是说你可以通过ContentProvider把应用中的数据共享给其他应用访问,其他应用可以通过ContentProvider 对你应用中的数据进行添删改查.关于数据共享,以前我们学习过文件操作模式,知道通过指定文件的操作模式为Context.MODE_WORLD_READABLE 或Context.MODE_WORLD_WRITEABLE同样也可以对外共享数据.那么,这里为何要使用ContentProvider 对