简单服务发现协议(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台机器 ...
随机推荐
- A - Smith Numbers POJ
While skimming his phone directory in 1982, Albert Wilansky, a mathematician of Lehigh University,no ...
- CoreDNS解析异常记录
CoreDNS解析异常记录 异常情况:集群是用kubespray部署的4个worknode,coredns默认部署2个deployment.今天发现部署了coredns的node上的pod正常解析内部 ...
- java 容器(collection)--ArrayList 常用方法分析 源码分析
ArrayList 介绍 打开jdk源码看看官方文档的介绍 粗糙的翻译下大致意思是: List接口的可调整大小的数组实现.实现了所有可选的列表操作,并允许所有元素,包括 null .除了实现List接 ...
- Kubernetes笔记(一):十分钟部署一套K8s环境
Kubernetes是Goole开源的一个容器编排引擎,它支持自动化部署.大规模可伸缩.应用容器化管理 -- 百度百科. 接触K8s也有半年多了,也基于阿里云平台搭建了包含多级服务.目前运行较为稳定的 ...
- Android 中 OkHttp 三步实现生命周期绑定
简介 OkHttps 是 OkHttp 增强版的超轻量封装包. 和 Retrofit 相比,它更加轻量(只有 59Kb),是 Retrofit (124Kb)的一半,而且更加的开箱即用,API 更加自 ...
- JavaScript学习笔记(1)字符串方法
字符串方法 length 属性返回字符串的长度 var txt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; var sln = txt.length; inde ...
- python学习笔记(四)---用户输入与while循环
用户输入 函数input demo1: message = input("all you input is chars:") print(message) demo2: 由inpu ...
- fedora 21下Virtual Box安装Windows XP SP3
Installing Virtual Box and Windows XP SP3 during Fedora 21 The first step:Download and Install Virtu ...
- 自定义parallelStream的thread pool
目录 简介 通常操作 使用自定义ForkJoinPool 总结 自定义parallelStream的thread pool 简介 之前我们讲到parallelStream的底层使用到了ForkJoin ...
- js数组排序和打乱
js数组根据不同的业务需求,会要求数组有序或者无序,记录一下流传较广,通用性较强的排序和乱序方法. 数组排序: arr.sort(function(a,b){//从小到大 return a-b;[re ...