本文主要讲解如何使用ssdp进行编程,不涉及过多关于ssdp的理论知识

1. 前言

  网上对ssdp理论介绍的一大把,缺乏从编程角度的一个指导,这里不会长篇大论ssdp理论,只是根据实际编码经验对用ssdp进行编码做个浅显的指导,希望能让同行少走一些弯路。

2. 编程角度对ssdp协议的剖析

  ssdp是在HTTPU和HTTPMU基础上实现的协议,HTTPU就是能在UDP上传输的HTTP协议(HTTP协议本身是基于TCP的),HTTPMU是在UDP上实现的HTTP协议的多址传送。从编程的角度来理解这段话,只需要抓住几个重点就可以了:UDPHTTP多址(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)编程指导的更多相关文章

  1. SSDP 简单服务发现协议

    http://blog.csdn.net/lilypp/article/details/6631951

  2. 低功耗蓝牙4.0BLE编程-nrf51822开发(7)-SDP服务发现协议

    SDP的全称是Service Discovery Protocol,中文是服务发现协议.SDP(服务发现协议)是蓝牙协议体系中的核心协议,是蓝牙系统重要组成部分,是所有用户模式的基础.在蓝牙系统中.客 ...

  3. 蓝牙—服务发现协议(SDP)

    服务搜索协议(SDP)提供了应用发现可用服务以及确定可用服务特点的方法.SDP发现协议提供下面的能力 <1>为客户提供搜索所需要服务的能力. <2>允许基于服务类型搜索服务 & ...

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

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

  5. 深入学习:如何实现不同Android设备之间相同应用程序的网络服务发现功能

    在我们的app中添加网络服务发现功能(NSD)以方便在不同的设备上响应局域网中的请求.这种功能对于多设备之间点对点服务来说很有用,例如多人游戏,多人通话,文件共享等. 一,在网络中注册你的服务 注意: ...

  6. 利用etcd实现服务注册和服务发现

    文章目录 服务注册 服务发现 协议编写 服务端实现 客户端实现 实验结果 参考文章 服务注册 主要逻辑在go func函数里面,先是去etcd获取一下服务,没有获取到的话就注册进去. package ...

  7. .net core使用ocelot---第七篇 服务发现

    简介 .net core使用ocelot---第一篇 简单使用   .net core使用ocelot---第二篇 身份验证使用  .net core使用ocelot---第三篇 日志记录  .net ...

  8. 初识服务发现及Consul框架的简单使用

    初识服务发现及Consul框架的简单使用   1.什么是服务发现? 服务发现组件记录了(大规模)分布式系统中所有服务的信息,人们或者其它服务可以据此找到这些服务. DNS 就是一个简单的例子. 当然, ...

  9. 服务发现之consul理论整理_结合Docker+nginx+Tomcat简单部署案例

    目录 一.理论概述 服务发现的概念简述 consul简述 二.部署docker+consul+Nginx案例 环境 部署 三.测试 四.总结 一.理论概述 服务发现的概念简述 在以前使用的是,N台机器 ...

随机推荐

  1. Python列表介绍,最常用的Python数据类型

    文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:数据杂论 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获 ...

  2. bypass安全狗测试学习

    搭建简单的sql注入环境 在test数据库中创建sqltest表,插入字段数据 编写存在注入的php文件 <?php $id = $_REQUEST['uid']; echo "您当前 ...

  3. Python软件定时器APScheduler使用【软件定时器,非操作系统定时器,软件可控的定时器】【用途:定时同步数据库和缓存等】【刘新宇】

    APScheduler使用 APScheduler (advanceded python scheduler)是一款Python开发的定时任务工具. 文档地址 https://apscheduler. ...

  4. 【FishFX】花式撩骚,打造TypeScript易用框架。

    · 栗子入手 假设有以下foo数组,数组中每个对象都拥有id,name两个属性,现在需要查找id > 0的对象数量. const foo: Array<{ id: number, name ...

  5. 为什么redis是单线程的以及为什么这么快?

    官网的说法 我们先来认真看一下官网的说法.翻译过来大意如下: CPU并不是您使用Redis的瓶颈,因为通常Redis要么受内存限制,要么受网络限制.例如,使用在一般Linux系统上运行的流水线Redi ...

  6. SQLI-LABS学习笔记(三)

    第十一关   这一关是POST注入   先利用bp抓包抓到post传输的参数数据     抓到传递的表单为   uname=admin&passwd=admin&submit=Subm ...

  7. iscsi的工作原理与优化(2)

    2.1 iSCSI协议模型,iscsi[会话层协议,即应用协议] iSCSI使用TCP/IP协议在不稳定网络上进行可靠的数据传输.iSCSI层和标准SCSI集在协议栈中的位置如图1所示.iSCSI层包 ...

  8. 怎么break java8 stream的foreach

    目录 简介 使用Spliterator 自定义forEach方法 总结 怎么break java8 stream的foreach 简介 我们通常需要在java stream中遍历处理里面的数据,其中f ...

  9. 还在写CURD?试试这款基于mybatis-plus的springboot代码生成器

    目录 ⚡Introduction ✔️Release Features Quick Start Examples 1.Controller模板代码示例 2.Service模板代码示例 3.Servic ...

  10. springmvc @ResponseBody HttpMediaTypeNotAcceptableException

    2019独角兽企业重金招聘Python工程师标准>>> [ERROR]org.springframework.web.HttpMediaTypeNotAcceptableExcept ...