简单服务发现协议(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台机器 ...
随机推荐
- Daily Scrum 1/6/2015
Process: Zhaoyang: Complete the speech API test and do some UI upgrade. Yandong: Help zhaoyang to do ...
- Django开发文档-域用户集成登录
项目概述: 一般在企业中,用户以WINDOWS的域用户统一的管理,所以以Django快速开发的应用,不得不集成AD域登录. 网上一般采用django-python3-ldap的库来做集成登录,但是本方 ...
- php7.2.1+redis3.2.1 安装redis扩展(windows系统)
前提:已成功安装PHP环境和Redis服务 下面进入正题: 第一步,下载redis驱动扩展文件,注意:需要根据上面信息下载对应版本 https://windows.php.net/downloads/ ...
- numpy+sklearn 手动实现逻辑回归【Python】
逻辑回归损失函数: from sklearn.datasets import load_iris,make_classification from sklearn.model_selection im ...
- Python自学从入门到就业之函数基础(小白必看)
函数介绍 <1>什么是函数 请看如下代码: print(" _ooOoo_ ") print(" o8888888o ") print(" ...
- thinkphp5--model数据操作的坑
最近用thinkphp5开发,经常用到model了来操作数据,但是操作多了,就发现他的坑了. 就好像如果你只是初始化一个model对象,但是你却用这个对象进行多次的数据操作,这时候他的数据就会发生混乱 ...
- How to skip all the wizard pages and go directly to the installation process?
https://stackoverflow.com/questions/22183811/how-to-skip-all-the-wizard-pages-and-go-directly-to-the ...
- 数据挖掘入门系列教程(十二)之使用keras构建CNN网络识别CIFAR10
简介 在上一篇博客:数据挖掘入门系列教程(十一点五)之CNN网络介绍中,介绍了CNN的工作原理和工作流程,在这一篇博客,将具体的使用代码来说明如何使用keras构建一个CNN网络来对CIFAR-10数 ...
- web 之 tomcat 8.5 和9.0如何进入manager?
tomcat 8.5 和9.0如何进入manager? 第一步找到tomcat-user.xml文件 第二步添加如下代码 <role rolename="manager-gui&quo ...
- 【DNS域名解析命令】 ping
ping, ping6 - send ICMP ECHO_REQUEST to network hosts ping命令向网络主机发送ICMP回传请求 详细描述: ping使用ICMP协议强制ECHO ...