upnp的ssdp服务器和客户端

ssdp-upnp的Python项目详细描述


SSDP_upnp

简介

acticle Exploring UPnP with Python 提供了对upnp的非常好的理解。ssdp是它的实现之一。

该包包括 3个单独的类 、ssdp服务器、ssdp客户端、nat upnp类。前两个类继承自类threading.thread类,因此两个类实例运行在自己的单个线程上。它们不会阻塞主线。在ssdp客户机找到具有相同产品名的对等机之后,它可以通过 queue与主线程通信。NAT UPNP类在主线程上运行,因此它不会阻塞I/O,它只搜索LAN GDI(具有UPNP NAP转发功能的路由器),并将内部端口与外部端口绑定。

服务器的逻辑是用1900端口监听广播地址。如果收到“m-search”消息,它将响应其服务信息。客户端只需发送一条带有“m-search”的广播消息,即可获取服务器的服务信息。

该软件包可用于局域网环境中对等点相互查找的区块链解决方案中。

API

服务器类

run() :在主线程中运行带有I/O阻塞的服务器
start() :在I/O非阻塞的其他线程中运行服务器
stop() :停止服务器

客户

run() :在主线程中运行带有I/O阻塞的客户机
start() :在I/O非阻塞的其他线程中运行客户机
stop() :停止客户端

NAT

addportforward(内部端口,外部端口) :在主线程中运行函数。如果绑定失败,则返回无;如果绑定成功,则返回元组(外部IP、外部端口)。
removeportforward(外部端口) :在主线程中运行函数。如果成功则返回true,如果失败则返回false。

示例

pip install ssdp-upnp
    import sys
    from ssdp_upnp.ssdp import Server, Client, Nat
    from ssdp_upnp.ssdp import gen_logger
    from queue import Queue

    logger = gen_logger('sample')

    if __name__ == '__main__':
        try:
            if sys.argv[1] == 'server':
                upnpServer  = Server(8048, 'blockchain', 'main')
                upnpServer.start()
            elif sys.argv[1] == 'client':
                queue = Queue()
                upnpClient = Client('blockchain', 'main', queue)
                upnpClient.start()
                logger.info(queue.get())
            elif sys.argv[1] == 'nat':
                nat = Nat()
                print(nat.addPortForward(8011, 8015))
            else:
                logger.warning('need params server or clinet')
        except Exception as e:
            logger.error(e)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
如何将RSS保存到xml文件java   java获取google搜索结果的数量   如果日期无效,java Spring mvc Joda Datetime转换器将失败   图像类型的java Getter setter方法?   java在ImageButtons上的setVisibility问题   多线程Spring 3。X Java 7线程安全日期/数字格式注入   用于指定空字符串的java正则表达式   java算法,以较少的迭代次数获得组合   java图标对象正沿对角线飞出帧   在Java中,如何搜索这个特定的正则表达式?   安卓刚刚为一个简单的Java GUI游戏编写了代码。需要研究和学习方面的建议吗   java为具有关系的对象实现save()操作?   java Apache Spark驱动程序看不到外部jar   java在BST的左侧插入右子级,反之亦然   java并发问题阻塞队列   泛型类型,java测试   java Android将地址解析为不带协议的URL   java Spring Boot即使使用Spring,仍能输出颜色。输出ansi。启用=从不   java Hibernate哈希映射   java JBoss 5.0应用程序无法启动/从类路径接受文件时出错