gpt4 book ai didi

Python 服务发现 : Advertise a service across a local network

转载 作者:太空狗 更新时间:2023-10-29 16:53:54 25 4
gpt4 key购买 nike

我有一个“服务器”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):]

此代码改编自 demo on python.org

关于Python 服务发现 : Advertise a service across a local network,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21089268/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com