简单服务发现协议(SSDP)编程指导
本文主要讲解如何使用ssdp进行编程,不涉及过多关于ssdp的理论知识
1. 前言
网上对ssdp理论介绍的一大把,缺乏从编程角度的一个指导,这里不会长篇大论ssdp理论,只是根据实际编码经验对用ssdp进行编码做个浅显的指导,希望能让同行少走一些弯路。
2. 编程角度对ssdp协议的剖析
ssdp是在HTTPU和HTTPMU基础上实现的协议,HTTPU就是能在UDP上传输的HTTP协议(HTTP协议本身是基于TCP的),HTTPMU是在UDP上实现的HTTP协议的多址传送。从编程的角度来理解这段话,只需要抓住几个重点就可以了:UDP、HTTP、多址(multicast)。UDP在这里表示ssdp底层是通过UDP传输的,多址表示ssdp是通过组播的方式工作的,那http在这里扮演什么角色呢? 我们先来回顾下普通的http协议(后面就直接称http协议),http协议是通过tcp传输的,而http本身只是规定了一些格式(就是浏览器和服务端都能理解的一份协议),从编程角度看,实际上http数据包也是普通的通过tcp传输的数据流,只是http本身规定了它的头(header)格式,而这个header里面会有一个content-length字段,标明http包体的长度,所以我们利用http本身的格式可以很容易的从tcp数据流中解析出http包。在ssdp协议里面,http就是扮演了一种格式,ssdp的格式就是利用http的数据包格式。
所以从编程角度看,可以用这样一句话总结ssdp:ssdp是基于UDP通信利用组播来工作的具有http格式的协议。理解了这些之后,我们就会惊奇的发现,当需要在局域网内搜寻设备时,我们完全可以采用UDP组播的方式来自定义一套私有协议啊。
3. ssdp服务端编程实现
前面我们知道了ssdp是基于udp的协议,那么服务端实现ssdp服务器就很简单了,只需要开启一个UDP监听,监听地址为组播地址,监听端口可以随意(ssdp默认端口是1900,实际上我们编码时可以随意采用哪个端口),解析收到的UDP包时采用http协议就好了。具体代码我就不放这里了,只要注意UDP监听要开启在组播地址上就好了。
4. ssdp客户端编程实现
客户端就是创建一个基于udp的socket,往组播地址上(端口是服务端开启的监听端口)发送http协议的消息就好了。
5. 结束语
刚开始接触ssdp的时候会很懵,网上都是一大堆理论讲解,有时候可能会看的云里雾里,但是如果能够看到ssdp的本质而不拘泥于ssdp协议本身具有哪些method、header(前面说了ssdp采用的就是http协议的格式,所以也会有method、header),就会发现ssdp还是很简单的一个协议。
简单服务发现协议(SSDP)编程指导的更多相关文章
- SSDP 简单服务发现协议
http://blog.csdn.net/lilypp/article/details/6631951
- 低功耗蓝牙4.0BLE编程-nrf51822开发(7)-SDP服务发现协议
SDP的全称是Service Discovery Protocol,中文是服务发现协议.SDP(服务发现协议)是蓝牙协议体系中的核心协议,是蓝牙系统重要组成部分,是所有用户模式的基础.在蓝牙系统中.客 ...
- 蓝牙—服务发现协议(SDP)
服务搜索协议(SDP)提供了应用发现可用服务以及确定可用服务特点的方法.SDP发现协议提供下面的能力 <1>为客户提供搜索所需要服务的能力. <2>允许基于服务类型搜索服务 & ...
- Android网络服务发现(NSD)协议的使用
Android的网络服务发现协议(NSD)能够用于在小范围的网络中发现邻近设备上的某个应用.这对于一些社交网络.多人游戏类的应用会很有帮助. Android的NSD的用法大致上分为四种操作: 1. 注 ...
- 深入学习:如何实现不同Android设备之间相同应用程序的网络服务发现功能
在我们的app中添加网络服务发现功能(NSD)以方便在不同的设备上响应局域网中的请求.这种功能对于多设备之间点对点服务来说很有用,例如多人游戏,多人通话,文件共享等. 一,在网络中注册你的服务 注意: ...
- 利用etcd实现服务注册和服务发现
文章目录 服务注册 服务发现 协议编写 服务端实现 客户端实现 实验结果 参考文章 服务注册 主要逻辑在go func函数里面,先是去etcd获取一下服务,没有获取到的话就注册进去. package ...
- .net core使用ocelot---第七篇 服务发现
简介 .net core使用ocelot---第一篇 简单使用 .net core使用ocelot---第二篇 身份验证使用 .net core使用ocelot---第三篇 日志记录 .net ...
- 初识服务发现及Consul框架的简单使用
初识服务发现及Consul框架的简单使用 1.什么是服务发现? 服务发现组件记录了(大规模)分布式系统中所有服务的信息,人们或者其它服务可以据此找到这些服务. DNS 就是一个简单的例子. 当然, ...
- 服务发现之consul理论整理_结合Docker+nginx+Tomcat简单部署案例
目录 一.理论概述 服务发现的概念简述 consul简述 二.部署docker+consul+Nginx案例 环境 部署 三.测试 四.总结 一.理论概述 服务发现的概念简述 在以前使用的是,N台机器 ...
随机推荐
- Bug Bash in Personal Photo Experience 1/11/2016
In the process of our Personal Photo Experience Project, There are some bugs which hinder our forwar ...
- 2020年必须掌握的硬核技能k8s
Kubernetes 是一个软件系统,使你在数以万计的电脑节点上运行软件时就像 所有节点是以单个大节点一样, 它将底层基础设施抽象,这样做同时简化了应用开发.部署,以及对开发和运维团队的管理. Kub ...
- Android-网页解析-gson的使用
相对于较为传统的Json解析来说,google共享的开源Gson在解析速度和所使用的内存在有着明显的优势,虽然说阿里巴巴也提供了fastgson包,但是它跟Gson的处理速度大同小异,只是底层实现的原 ...
- android位运算简单讲解
一.前言 在查看源码中,经常会看到很多这样的符号“&”.“|”.“-”,咋一看挺高大上:仔细一看,有点懵:再看看,其实就是大学学过的再普通不过的与.或.非.今天小盆友就以简单的形式分享下,同时 ...
- urlencode()和rawurlencode()区别
urlencode和rawurlencode两个方法在处理字母数字,特殊符号,中文的时候结果都是一样的 ,唯一的不同是对空格的处理, urlencode处理成“+”, rawurlencod ...
- DZ的CURD
Discuz二次开发-MySQL插入数据(insert) DB::insert($tableName,$data,$flag); $tableName:表名 $data:插入数据,以字段为键值的关联数 ...
- Linux系统进入救援模式
由于现在很多的服务器都是用的RedHat,CentOS也比较多,这里就介绍CentOS6.6的救援模式. 有很多人的linux在用的时候不小心修改了某个权限,导致系统启动不起来,下面我就来为大家解决一 ...
- [Inno Setup] How to create a OuterNotebook/welcome page in the uninstaller
By Martin Prikryl https://stackoverflow.com/questions/42625626/inno-setup-how-to-create-a-outernoteb ...
- java.util.concurrent简介
文章目录 主要的组件 Executor ExecutorService ScheduledExecutorService Future CountDownLatch CyclicBarrier Sem ...
- Spring5参考指南:组件扫描
文章目录 组件扫描 @Component 元注解和组合注解 组件内部定义Bean元数据 为自动检测组件命名 为自动检测的组件提供作用域 生成候选组件的索引 组件扫描 上一篇文章我们讲到了annotat ...