Python Kademlia DHT

2024-06-01 12:41:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我对这项任务非常迷茫。我们应该使用kademlia创建3个python文件。这两个文件是节点,第三个文件是DHT应用程序的一个集合查询。我们还收到一个CSV文件,必须导入该文件并将数据发送到DHT网络任何帮助都将不胜感激以下是作业:

您首先需要创建一个初始起始节点(参见下面的代码)。这将在端口8468的本地系统上启动


# Modified from: https://kademlia.readthedocs.io/en/latest/intro.html

import logging
import asyncio

from kademlia.network import Server

handler = logging.StreamHandler()
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
log = logging.getLogger('kademlia')
log.addHandler(handler)
log.setLevel(logging.DEBUG)


loop = asyncio.get_event_loop()
loop.set_debug(True)

server = Server()
loop.run_until_complete(server.listen(8468))


try:
    loop.run_forever()
except KeyboardInterrupt:
    pass
finally:
    server.stop()
    loop.close()

接下来,您需要在端口8469上启动DHT应用程序的另一个本地节点(请参阅下面的代码)



# Modified from: https://kademlia.readthedocs.io/en/latest/intro.html

import logging
import asyncio

from kademlia.network import Server

handler = logging.StreamHandler()
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
log = logging.getLogger('kademlia')
log.addHandler(handler)
log.setLevel(logging.DEBUG)

bootstrap_node = ("localhost", int("8468"))
loop = asyncio.get_event_loop()
loop.set_debug(True)

server = Server()
loop.run_until_complete(server.listen(8469))
loop.run_until_complete(server.bootstrap([bootstrap_node]))

try:
    loop.run_forever()
except KeyboardInterrupt:
    pass
finally:
    server.stop()
    loop.close()

最后,下面的代码将允许您查询DHT应用程序并添加键/值对(见下文)


# Modified from: https://kademlia.readthedocs.io/en/latest/querying.html

import logging
import asyncio

from kademlia.network import Server

handler = logging.StreamHandler()
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
log = logging.getLogger('kademlia')
log.addHandler(handler)
log.setLevel(logging.DEBUG)

async def run():
    server = Server()
    await server.listen(8470)
    bootstrap_node = ("localhost", int("8469"))
    await server.bootstrap([bootstrap_node])

    await server.set("myKey2", "myValue2")

    result = await server.get("myKey2")
    print("Get result:", result)
    server.stop()

asyncio.run(run())

现在您已经有了两个节点的代码以及设置和查询DHT应用程序的代码,使用DHT_Data.csv文件,编写一个Python程序,导入csv文件并将该数据发送到DHT网络。此外,编写一些代码,获取DHT_Data.csv文件中的密钥列表,并查询DHT应用程序,以显示您可以查询和返回值

以下是CSV文件的屏幕截图: DHT_Data.csv

以下是我的代码截图:

KademlaiDHTServer.py

kademliaDHTAdditionalNode.py

kademliaDHTSetandQuery.py


Tags: 文件run代码fromimportlooplogasyncio