gpt4 book ai didi

Python 套接字 : Send/receive multiple message

转载 作者:行者123 更新时间:2023-11-28 18:14:19 25 4
gpt4 key购买 nike

我写了一个有两个模块的应用程序。

  1. 代理:收集有关计算机资源的信息并发送给管理器。

  2. Manager : 从客户端监听数据并写入数据库。

我已经完成了Agent上的数据采集功能。我为每种信息编写函数。 Exp : OS() 用于操作系统信息,DISK() 用于磁盘使用信息 ....

每个函数返回一个包含信息的列表。我想将这些列表发送给经理。但是当向管理器发送数据时,我必须将数据类型更改为字符串。

我想我应该一个一个地发送每个列表,以便于将数据类型改回列表。我打算在 Agent 和 Manager 上写一个 for 循环来发送/接收数据。

代理:

resource_info = [OS(), CPU(), DISK(), MEMORY(), NETWORK(), FIREWALL()]

try:
for x in resource_info:
s.sendall(str(x))
except socket.error, e:
print "Error sending data: %s" % e
sys.exit(1)

# Close Socket
s.close()

经理:

s.listen(10)
for x in range(0,4):
if x == 0 :
conn, addr = s.accept()
OS = conn.recv(100000)
if x == 1 :
conn, addr = s.accept()
DISK = conn.recv(100000)
if x == 2 :
conn, addr = s.accept()
MEMORY = conn.recv(100000)
....

OS = OS.split(",")
DISK = DISK.split(",")
....

但我认为这是一种愚蠢的做法。请给我一些关于如何将 Agent 上的多个列表发送给 Manager 的建议。如果您有示例代码,那就太好了。非常感谢,广

最佳答案

我建议您创建一个 dict 来将每个资源映射到其相应的信息,而不是创建一个 list

resource_info = {
'OS': [...],
'DISK': [...]
}

将此数据发送到套接字的更简洁的方法是使用 pickle .使用 pickle,您可以序列化 Python 对象。

import pickle
data = pickle.dumps({'foo': 'bar'})

在管理器上,您可以接受字节并使用 pickle.loads(...) 反序列化它们。

data = s.recv(4096)
deserialized_data = pickle.loads(data)

你可以看看this示例实现的答案。

我还建议阅读 this blogpost了解套接字是字节流,而不是消息流。

关于Python 套接字 : Send/receive multiple message,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49443973/

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