简单服务发现协议(SSDP)编程指导

本文主要讲解如何使用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还是很简单的一个协议。

原文地址:https://www.cnblogs.com/lvnux/p/12797093.html