Python 服务发现:在本地网络上公布服务

2024-03-01

我有一个“服务器”python 脚本在其中一台本地网络计算机上运行,​​它等待客户端连接,并传递给它们一些要做的工作。服务器和客户端代码都已编写,并且正在按预期工作......

问题是,该服务器可能从本地网络中的任何机器上运行,因此我无法在脚本中对地址进行硬编码...我立即想知道是否可以让机器通告其存在,并且客户端可以响应对此。在 Python 中使用标准库可以实现这一点吗?不幸的是,我真的没有时间下载twisted 或tornado 并了解它们,所以我需要一些简单的东西。

我尝试更多地考虑这个问题,并意识到我可以拥有一台静态 IP 机器,服务器可以从中注册/注销,客户端可以从那里查找服务器。我认为有点像种子跟踪器。如果我不能轻松地执行服务广告方法,则必须这样做。


进行服务公告/发现的简单方法在本地网络上是通过广播UDP数据包。

常数:

PORT = 50000
MAGIC = "fna349fn" #to make sure we don't confuse or get confused by other programs

公告:

from time import sleep
from socket import socket, AF_INET, SOCK_DGRAM, SOL_SOCKET, SO_BROADCAST, gethostbyname, gethostname

s = socket(AF_INET, SOCK_DGRAM) #create UDP socket
s.bind(('', 0))
s.setsockopt(SOL_SOCKET, SO_BROADCAST, 1) #this is a broadcast socket
my_ip= gethostbyname(gethostname()) #get our IP. Be careful if you have multiple network interfaces or IPs

while 1:
    data = MAGIC+my_ip
    s.sendto(data, ('<broadcast>', PORT))
    print "sent service announcement"
    sleep(5)

发现:

from socket import socket, AF_INET, SOCK_DGRAM

s = socket(AF_INET, SOCK_DGRAM) #create UDP socket
s.bind(('', PORT))

while 1:
    data, addr = s.recvfrom(1024) #wait for a packet
    if data.startswith(MAGIC):
        print "got service announcement from", data[len(MAGIC):]

该代码改编自python.org 上的演示 http://svn.python.org/projects/python/trunk/Demo/sockets/broadcast.py

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 服务发现:在本地网络上公布服务 的相关文章

  • 如何在多进程系统中实现锁定?

    我们正在并行运行许多詹金斯项目 我们使用 python 并且选择使用 pyenv 管理虚拟环境 不幸的是 pyenv 有一个众所周知的竞争条件 https github com yyuu pyenv issues 174 为了解决这个问题
  • Python 切片对象和 __getitem__

    python 中是否有内部的东西来处理传递给的参数 getitem 不同 并自动转换start stop step构造成切片 这是我的意思的演示 class ExampleClass object def getitem self args
  • 使用 django-rest-framework 设置对象级权限

    尝试使用 django rest framework 最干净 最规范地管理 django guardian 对象级权限 我想将对象的读取权限 module view object 分配给在执行 POST 时发出请求的用户 我的基于阶级的观点
  • 按边距(“全部”)值列对 Pandas 数据透视表进行排序

    我试图根据 pandas 数据透视表中的行总和对最后一列 边距 aggrfunc 进行降序排序 我知道我在这里错过了一些简单的东西 但我无法弄清楚 数据框 数据透视表 WIDGETS DATE 2 1 16 2 2 16 2 3 16 Al
  • 从 Azure ML 实验中访问 Azure Blob 存储

    Azure ML 实验提供了通过以下方式读取 CSV 文件并将其写入 Azure Blob 存储的方法 Reader and Writer模块 但是 我需要将 JSON 文件写入 blob 存储 由于没有模块可以执行此操作 因此我尝试在Ex
  • 使用 Boto3 以字符串形式打开 S3 对象

    我知道使用 Boto 2 可以使用以下命令将 S3 对象作为字符串打开 get contents as string http boto readthedocs org en latest ref file html highlight c
  • 使用python从gst管道抓取帧到opencv

    我在用着OpenCV http opencv org 和GStreamer0 10 我使用此管道通过自定义套接字通过 UDP 接收 MPEG ts 数据包sockfd由 python 提供并显示它xvimagesink 而且效果很好 以下命
  • 运行 Python 单元测试,以便成功时不打印任何内容,失败时仅打印 AssertionError()

    我有一个标准单元测试格式的测试模块 class my test unittest TestCase def test 1 self tests def test 2 self tests etc 我的公司有一个专有的测试工具 它将作为命令行
  • 根据其他单元格值更改多个单元格值

    我想更改包含的单元格moving to movingToOpenor movingToClose基于下一个单元格中给出的状态 有时循环会被中断并且不会从open to close or close to open 这是我当前的数据框 Dat
  • 两个不同长度的数据帧的列之间的余弦相似度?

    我在 df1 中有文本列 在 df2 中有文本列 df2 的长度将与 df1 的长度不同 我想计算 df1 text 中每个条目与 df2 text 中每个条目的余弦相似度 并为每场比赛给出分数 输入样本 df1 mahesh suresh
  • 给定一个排序数组,就地删除重复项,使每个元素仅出现一次并返回新长度

    完整的问题 我开始在线学习 python 但对这个标记为简单的问题有疑问 给定一个排序数组 就地删除重复项 使得每个 元素只出现一次并返回新的长度 不分配 另一个数组的额外空间 您必须通过修改输入来完成此操作 数组就地 具有 O 1 额外内
  • Airflow 1.9 - 无法将日志写入 s3

    我在 aws 的 kubernetes 中运行气流 1 9 我希望将日志发送到 s3 因为气流容器本身的寿命并不长 我已经阅读了描述该过程的各种线程和文档 但我仍然无法让它工作 首先是一个测试 向我证明 s3 配置和权限是有效的 这是在我们
  • XPath:通过当前节点属性选择当前和下一个节点的文本

    首先 这是从我之前的问题 https stackoverflow com questions 5202187 xpath select current and next nodes text by current node attribut
  • 使用 PIL 在 Tkinter 中显示动画 GIF

    我正在尝试制作一个程序来使用 Tkinter 显示动画 GIF 这是我最初使用的代码 from future import division Just because division doesn t work right in 2 7 4
  • 如何将带有参数的Python装饰器实现为类?

    我正在尝试实现一个接受一些参数的装饰器 通常带有参数的装饰器被实现为双重嵌套闭包 如下所示 def mydecorator param1 param2 do something with params def wrapper fn def
  • pandas 中数据帧中的随机/洗牌行

    我目前正在尝试找到一种方法来按行随机化数据框中的项目 我在 pandas 中按列洗牌 排列找到了这个线程 在 pandas 中对 DataFrame 进行改组 排列 https stackoverflow com questions 157
  • 将 Keras 集成到 SKLearn 管道?

    我有一个 sklearn 管道 对异构数据类型 布尔 分类 数字 文本 执行特征工程 并想尝试使用神经网络作为我的学习算法来拟合模型 我遇到了输入数据形状的一些问题 我想知道我想做的事情是否可能 或者我是否应该尝试不同的方法 我尝试了几种不
  • IndexError - 具有匀称形状的笛卡尔 PolygonPatch

    我曾经使用 shapely 制作一个圆圈并将其绘制在之前填充的图上 这曾经工作得很好 最近 我收到索引错误 我将代码分解为最简单的操作 但它甚至无法执行最简单的循环 import descartes import shapely geome
  • python从二进制文件中读取16字节长的双精度值

    我找到了蟒蛇struct unpack 读取其他程序生成的二进制数据非常方便 问题 如何阅读16 字节长双精度数出二进制文件 以下 C 代码将 1 01 写入二进制文件三次 分别使用 4 字节浮点型 8 字节双精度型和 16 字节长双精度型
  • 无法安装最新版本的 Numpy (1.22.3)

    我正在尝试安装最新版本的 numpy 即 1 22 3 但看起来 pip 无法找到最后一个版本 我知道我可以从源代码本地安装它 但我想了解为什么我无法使用 pip 安装它 PS 我有最新版本的pip 22 0 4 ERROR Could n

随机推荐

  • 前向声明不适用于转换运算符

    考虑下一个代码 include
  • Android:以编程方式在 EditText 内居中文本

    有没有办法让输入的文本居中EditText场地 更具体地说 光标不应从框的左侧开始 而应从中心开始 并在填充输入时向外向左移动 你应该使用 textView setGravity Gravity CENTER HORIZONTAL
  • 通过 PEAR 安装 phpunit 后如何获得 phpunit.bat?

    我需要 phpunit bat 来配置我的 NetBeans IDE 我在用着wamp http www wampserver com 我只需使用以下说明通过 pear 安装 phpunit 在开始使用 PEAR 之前 请从以下位置下载最后
  • 如何找到我的 MySQL URL、主机、端口和用户名?

    我需要找到我的 MySQL 用户名 当我打开 MySQL 命令行客户端时 它只询问我的密码 我不记得我的用户名了 为了与 JDBC 连接 我需要 URL 主机和端口号 我在哪里可以找到所有这些 如果您已经登录命令行客户端 请尝试以下操作 m
  • 在 Geodjango + Postgres 中存储圆

    希望在 geodjango 字段中存储一个圆 以便我可以使用 geodjango 查询 contains 来查找圆中是否有一个点 类似于使用 PolygonField 可以完成的操作 目前将其存储为十进制半径和 GeoDjango 点字段
  • 如何使用 Google Calendar API v3/Google API 客户端库显示*所有*可用日历的列表?

    我一直在尝试使用 PHP 访问 Google Calendar API v3 最初 我想简单地列出我可以通过 API 调用访问的用户日历 为此 我下载了 Google API PHP 客户端库 并尝试使用以下代码 经过我的改编 来自http
  • IIS 7.5 上的 MVC5 路由错误 (404.0) 错误

    一个古老的故事是 在开发机器上一切正常 但在主机服务器上却不行 HTTP 错误 404 0 未找到 模块IIS 网络核心 通知地图请求处理器 处理程序静态文件 错误代码0x80070002 尝试通过添加在开发机器上产生相同的错误
  • 使用参数时“Between”运算符生成错误的查询计划

    我有一个简单的日期表 Date DateID 其中包含 1900 年 1 月 1 日到 2100 年 12 月 31 日之间的日期列表 当使用从表中选择时between运算符和硬编码参数值 我得到了一个正确的查询计划 其中有 3 个估计行与
  • 使用多个参数注册 DbContext

    我正在尝试将 TenantProvider 注入 DbContext public class AppDbContext IdentityDbContext
  • Django 装置使用默认值保存

    我正在使用 Django 1 7 但我的装置有问题 我希望 Django 使用默认值或使用save 方法来创建未指定的值 这是我当前的对象 File uuidable py import uuid from django db import
  • Java中共享内存的任何概念

    AFAIK Java中的内存是基于堆的 内存是动态分配给对象的 并且没有共享内存的概念 如果没有共享内存的概念 那么Java程序之间的通信应该是很耗时的 在 C 中 与其他通信模式相比 通过共享内存进行进程间通信更快 如我错了请纠正我 另外
  • 访问“仅差异”ZFS 快照

    有没有办法挂载仅包含特定于快照的文件的虚拟分区 我知道隐藏的 zfs 目录 但它包含快照时的所有文件 我的目标是使差异备份更快 提前致谢 greg 尽管安德鲁的建议zfs send如果您只是想 这是使用差异快照的正确方法see差异并在您自己
  • 无法将 python 配置为代理

    与我的问题相关的早期帖子都无法为我提供解决方案 所以我在一个新线程中发帖 我通过大学中经过身份验证的代理连接到互联网 所以在浏览器中 我输入我的用户名密码 但是我无法在 python 中下载数据 我在 python 2 7 中输入以下 4
  • 有没有办法将 Google colab 环境保存到某个地方并重新使用它?

    我尝试过 virtualenv 和 conda 它已成功安装 但我无法激活虚拟环境 然后我考虑将 Colab 环境 我的意思是已安装的库 保存到某个地方 也许是 Google Drive 然后我可以重用它 是否可以 对于提问者以及因同一问题
  • 您更喜欢哪种方法来改进 Maven 项目的增量构建?

    我将优化构建项目的时间 最耗时的事情之一是项目的编译 由于这里特别提到的 Maven 的已知问题 Maven增量构建 https stackoverflow com questions 6281699 maven incremental b
  • 与alignas语法作斗争

    我正在尝试使用alignas对于属于类成员的指针 坦率地说 我不确定应该把它放在哪里 例如 class A private int n alignas 64 double ptr public A const int num n num p
  • 使用 mat-paginator 和 mat-table 使用可观察数组作为数据源

    我使用可观察数组作为数据源 这工作正常 只是我现在无法弄清楚如何使用分页器 下面是html和ts html table class mat elevation z8 table
  • Rails 使用哈希数组查找记录

    使用字段选择 按字段对查询 in clause 我有一个哈希数组 如下所示 product id 7629 group id 4 product id 8202 group id 3 我想返回的是所有的记录Items与数组中的字段对匹配的表
  • Android AutoCompleteTextView 在横向模式下显示对象信息而不是文本

    我正在使用带有 AutoCompleteTextView 的自定义适配器 它在模拟器和我的平板电脑上运行良好 但是 我的手机在横向模式下出现问题 在此模式下显示的自动完成提示是对象信息而不是文本 但是 当我选择任何项目时 字段会正确填充相应
  • Python 服务发现:在本地网络上公布服务

    我有一个 服务器 python 脚本在其中一台本地网络计算机上运行 它等待客户端连接 并传递给它们一些要做的工作 服务器和客户端代码都已编写 并且正在按预期工作 问题是 该服务器可能从本地网络中的任何机器上运行 因此我无法在脚本中对地址进行