Maz*_*yod 16 python sockets networking client-server service-discovery
我有一个"服务器"python脚本在一台本地网络机器上运行,它等待客户端连接,并传递一些工作要做.服务器和客户端代码都已编写,并按预期工作...
问题是,这台服务器可能是从本地网络中的任何一台机器运行的,所以我不能对脚本中的地址进行硬编码......我立刻想知道我是否可以让机器做广告,告诉它是否存在,客户可以回复那个.使用标准库在Python中可行吗?不幸的是,我真的没有时间下载扭曲或龙卷风并了解它们,所以我需要一些简单的东西.
我试图更多地考虑它,并意识到我可以有一台静态IP机器,服务器注册/取消注册,客户端可以从那里寻找服务器.我想,有点像洪流跟踪器.如果我不能轻易地做出服务广告方法,那就必须这样做.
gon*_*opp 24
在本地网络上进行服务通告/发现的简单方法是通过广播UDP分组.
常量:
PORT = 50000
MAGIC = "fna349fn" #to make sure we don't confuse or get confused by other programs
Run Code Online (Sandbox Code Playgroud)
公告:
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)
Run Code Online (Sandbox Code Playgroud)
发现:
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):]
Run Code Online (Sandbox Code Playgroud)
此代码改编自python.org上的演示
| 归档时间: |
|
| 查看次数: |
6401 次 |
| 最近记录: |