Mozi.SSDP是一个基于.Net开发的SSDP服务组件,目标是为.Net应用程序提供完善的SSDP服务功能。项目对UDP Socket进行封装,并遵循UPNP/2.0(UPnP Device Architecture 2.0),实现了UPNP2.0规范中的大部分功能。
发现-在线
设备和服务描述
控制
事件
dotnet add package Mozi.SSDP --version 1.2.5
Mozi.HttpEmbedded > 1.2.5
本项目采用MIT开源协议,引用请注明出处。欢迎复制,引用和修改。意见建议疑问请联系软件作者,或提交ISSUE。
//开启SSDP服务 var interfaces = NetworkInterface.GetAllNetworkInterfaces(); foreach (var r in interfaces) { if (r.SupportsMulticast && r.NetworkInterfaceType != NetworkInterfaceType.Loopback) { foreach (var ip in r.GetIPProperties().UnicastAddresses) { if (ip.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) { SSDPService ssdp = new SSDPService(); ssdp.PackDefaultSearch.ST = new TargetDesc() { Domain = ssdp.Domain, ServiceType=ServiceCategory.Device, ServiceName="simplehost", Version=1 }; ssdp.MulticastAddress = "239.255.255.250"; ssdp.BindingAddress = ip.Address; ssdp.OnNotifyAliveReceived += Ssdp_OnNotifyAliveReceived; ssdp.OnSearchReceived += Ssdp_OnSearchReceived; ssdp.OnNotifyByebyeReceived += Ssdp_OnNotifyByebyeReceived; ssdp.OnNotifyUpdateReceived += Ssdp_OnNotifyUpdateReceived; ssdp.OnResponseMessageReceived += Ssdp_OnResponseMessageReceived; ssdp.AllowLoopbackMessage = true; //初始化并加入多播组 ssdp.Activate(); //开始公告消息 ssdp.StartAdvertise(); } } } }
废话少说,直接上代码。服务端ssdp_server.py: # -*- coding: utf-8 -*- import socket SSDP_ADDR = '239.255.255.250' SSDP_PORT = 1900 SERVICE_NAME = 'my_service' class Connection(): def __init__(self, s, data, a
前面一篇博客里面已经介绍过SSDP协议原理,本篇博客将实现实现Android上的SSDP协议。 关键技术分析:1、发送广播;需要发送送广播,所以需要使用MulticastSocket、SocketAddress、InetAddress,需要掌握。 2、SSDP数据报格式;标准的SSDP Server解析的时候对于分段的字段选用的特征码是"\r\n",需要特别注意。 3、访问权限;需
SSDP是一个“简单服务发现协议” ,即英文“Simple Service Discovery Protocol的缩写” , 该协议定义了如何在网络上发现网络服务的方法。SSDP也规定了存放在XML文件中的信息格式。SSDP信息的传送是依靠HTTPU和HTTPMU进行的。不论是控制点,或是UPnP设备,工作中都必然用到SSDP,设备接入网络之后,要利用它向网络广播自己的存在(广播的信息中还有设备位
多线程运行代码如下 from scapy.all import * import random import threading class myThread (threading.Thread): def __init__(self,threadID,name,srcip,dstip): threading.Thread.__init__(self)
前言: 之前有专文介绍了minidlna中的UPNP功能,内中介绍其中包含的SSDP(简单发现协议),SOAP(简单对象访问协议)等几个协议(http://blog.csdn.net/sakaue/article/details/19070735)。本文将根据minidlna的程序流程,概述SSDP的流程,为下一部分ACE实现做铺垫。 设备发现的大致流程: 首先,根
1.提出需求 嵌入式设备开发过程中往往需要使用telnet或者ssh进行登陆调试,设备发布之后也需要再局域网内进行设备管理。此时就需要再局域网下搜索设备。 2.解决问题 2.1 串口 串口时最简单有效的方式,ifconfig查看IP地址即可,但千里马常有,串口不常有。 2.2 组播广播 设备绑定一个广播端口,等待广播包,缺点是协议不统一,需要自己制定协议编写代码。稳定性得不到保障 2.
设备发现的大致流程: 首先,根据UPNP的规范: 在设备加入网络,UPnP发现协议允许设备向控制点广告它的服务。它使用向一个标准地址和端口多址传送发现消息来实现。控制点在此端口上侦听是否有新服务加入系统。为了通知所有设备,一个设备为每个其上的嵌入设备和服务发送一系列相应的发现消息。每个消息也包含它表征设备或服务的特定信息。 我们需要在服务(设备)开始时定时多
前言: 之前有专文介绍了minidlna中的UPNP功能,内中介绍其中包含的SSDP(简单发现协议),SOAP(简单对象访问协议)等几个协议(http://blog.csdn.net/sakaue/article/details/19070735)。本文将根据minidlna的程序流程,概述SSDP的流程,为下一部分ACE实现做铺垫。 设备发现的大致流程: 首先,根据UPNP的规范: 在设备加入网
在网上可能有很多说ssdp的文章, 我觉得比较多的是说一些比较文邹邹的东西,可能看的人云里雾里, 可能这就是大神的正常表现。或者贴出那种协议的东西。 我觉得我在考虑一个库的东西, 我会考虑它具体的功能和接口信息,还有在使用时的一些限制,和使用的时候的表现形态。这才是我在考虑一个是否使用的关键。我觉得对于一个软件开发人员来说,这才是需要知道东西。 1,功能 : 局域网发现, 2,局限是只能在同一个网
本文向大家介绍详解.NET Core+Docker 开发微服务,包括了详解.NET Core+Docker 开发微服务的使用技巧和注意事项,需要的朋友参考一下 .NET Core发布很久了,因为近几年主要使用java,所以还没使用过.NET Core,今天正好有一个c#写的demo,需要做成服务,不想再转成java来实现,考虑使用.NET CORE来尝下鲜,目标是开发一个微服务,然后部署到Dock
MIP CLI 提供了调试服务器来方便组件开发者开发与调试组件。 启动调试服务器 对于官方组件(mip2-extensions)开发者,首先我们需要在命令行窗口 cd 到 mip2-extensions 的根目录下,通过如下命令启动调试服务器: mip2 dev -i 对于第三方站长组件(mip2-extensions-platform)开发者,需要 cd 到各自站点的目录下(sites/[站点名
本文向大家介绍基于Vue开发数字输入框组件,包括了基于Vue开发数字输入框组件的使用技巧和注意事项,需要的朋友参考一下 随着 Vue 越来越火热, 相关组件库也非常多啦, 只用轮子怎么够, 还是要造起来!!! 1、概述 Vue组件开发的API:props、events和slots 2、组件代码 github地址:https://github.com/MengFangui/VueInputNumbe
braft并不能直接被任何client访问, 本文主要是说明一个能访问braft节点的client需要那些要素。 Example client side code of Counter 总体流程 要访问braft的主节点,需要做这么一些事情: 需要知道这个复制组有哪些节点, 这个可以通过配置列表,记录在dns,或者提供某些naming service如集群的master,redis, zookee
braft 本身并不提供server功能, 你可以将braft集成到包括brpc在内的任意编程框架中,本文主要是阐述如何在分布式Server中使用braft来构建高可用系统。具体业务如何实现一个Server,本文不在展开。 Example server-side code of Counter 注册并且启动Server braft需要运行在具体的brpc server里面你可以让braft和你的业
主要内容:基于 xinetd 服务的启动,基于xientd 服务的自启动本节学习基于 xinetd 服务的管理方法。基于 xinetd 的服务同样有启动管理和自启动管理之分,而且不管是启动管理还是自启动管理,都只有一种方法,相比独立的服务简单一些。 基于 xinetd 服务的启动 基于 xinetd 的服务没有自己独立的启动脚本程序,是需要依赖 xinetd 的启动脚本来启动的。xinetd 本身是独立的服务,所以 xinetd 服务自己的启动方法和独立服务的启动方法